选择排序的时间复杂度为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]);
}
}
排序算法:选择排序及其时间复杂度

本文详细介绍了选择排序算法的实现过程和时间复杂度特性,通过代码实例展示了如何在不同场景下应用选择排序,并阐述了其O(n^2)的时间复杂度。
1916

被折叠的 条评论
为什么被折叠?



