//简单选择排序:遍历一次找到最小与第一个元素互换位置,再从第二个元素开始遍历找到最小与第二个元素互换位置...
# include<stdio.h>//时间复杂度 O(n^2) 稳定
void SelectSort(int a[], int n){
for(int i = 1; i < n; i++){ //第一趟共比较n-1次
int k = i; //k总是指向最小的那个数的下标,开始认为第一个数最小,然后把最小的数往上放
for(int j = i+1; j <= n; j++) //从个第二个数开始循环找出这组数中最小数的下标,并把它赋值给k
if(a[j] < a[k])
k = j;
if(k != i){ //若果最小的那个数不是开始排序的第一个数,那么就把最小的那个数和开始排序的第一个数交换
int t = a[i];
a[i] = a[k];
a[k] = t;
}
}
}
int main(){
int n;
printf("请输入你要排序的数的个数:");
scanf("%d", &n);
int *a = new int[n];//申请一个整型变量空间,没有赋初值,并定义一个整型指针a指向该地址空间
for(int i = 1; i <= n; i++)
scanf("%d", &a[i]);
SelectSort(a, n);
printf("排序后:");
for(int j = 1; j <= n; j++)
printf("%6d", a[j]);
delete []a;//回收数组a的空间
return 0;
}