C语言实现选择排序
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
// 定义元素类型为整型
typedef int ElemType;
// 定义静态表结构体
typedef struct{
ElemType *elem; // 动态分配的数组指针
int TableLen; // 表长度
} SSTable;
// 初始化静态表
void STInit(SSTable &ST, int len) {
ST.TableLen = len; // 设置表长度
ST.elem = (ElemType *)malloc(sizeof(ElemType)*ST.TableLen); // 分配内存
int i;
srand(time(NULL)); // 使用当前时间作为随机数种子
for(i = 0; i < ST.TableLen; i++){ // 循环初始化数组元素
ST.elem[i] = rand()%100; // 随机填充元素(0-99)
}
}
// 打印静态表内容
void STPrint(SSTable ST){
for(int i = 0; i < ST.TableLen; i++){
printf("%3d",ST.elem[i]); // 打印元素,右对齐,总宽度为3个字符
}
printf("\n"); // 换行
}
// 定义选择排序函数,参数为一个整型数组指针和数组的长度
void SelectSort(ElemType *A, int n) {
int i, j, tem; // 声明用于迭代的索引变量i、j以及临时交换变量tem
// 遍历数组中的每一个元素作为基准点
for (i = 0; i < n-1; i++) {
// 从i+1开始遍历剩余未排序的部分,寻找最小值的位置
for (j = i + 1; j < n; j++) {
// 如果当前基准点的值大于后续元素中的任何一个,则记录下来
if (A[i] > A[j]) {
// 交换当前基准点与找到的更小值的位置
tem = A[i]; // 使用临时变量存储基准点的值
A[i] = A[j]; // 将找到的较小值放到基准点位置
A[j] = tem; // 将原来基准点的值放到较小值原来的位置
}
}
}
}
int main(){
SSTable ST;
STInit(ST,10); // 初始化静态表,设置长度为10
STPrint(ST); // 打印未排序的静态表
SelectSort(ST.elem,10); // 调用插入排序函数,对静态表中的数据进行排序
STPrint(ST); // 再次打印静态表,这次是排序后的结果
scanf("%d"); // 防止程序立即退出
return 0;
}