选择排序的时间复杂度为O(n^2)
算法思想:每次遍历当前未排序部分,记录其中最大元素的下标,遍历完成后,将该元素与未排序部分的最后一个元素交换;每次遍历后未排序部分的长度减1
代码如下:
void swap(int * a, int * b){
assert(a != NULL);
assert(b != NULL);
if(a != b){
*a ^= *b;
*b ^= *a;
*a ^= *b;
}
}
void process(int a[], int n){
assert(a != NULL);
assert(n > 0);
int max; //记录当前未排序序列中最大元素的下标
for(int i = n-1; i >= 1; i--){
max = 0; //每次要将max初始化为0,即第一个元素
for(int j = 1; j <= i; j++){ //j的初始值为1即可,因为max初始为0,不需要再将a[0]和自身进行比较
if(a[j] > a[max])
max = j;
}
swap(&a[i], &a[max]);
}
}