C笔记 - 算法:选择排序
选择排序
1 - 选择排序(Selection-sort):首先在未排序的序列中找到最小(大)元素,存放到将要排序序列的起始位置;然后再从剩余未排序元素中继续寻找最小(大)元素,放到已排序序列的末尾......以此类推,直到所有元素均排序完毕。其实质依旧是通过两两比较,找出最值放在你要排序的起始位置,如此循环完成排序
2 - 它是最稳定的排序算法之一,无论什么数据进去,时间复杂度都是 O(n2) 。唯一的好处可能就是不占用额外的内存空间
3 - 代码示例
1 #include <stdio.h> 2 int main(int argc, const char * argv[]) { 3 4 int array[] = {5,3,12,6,2,10}; 5 int length = 6; 6 7 // 外层:控制轮数 8 for (int i = 0; i < length-1; i ++) { 9 10 printf("第 %d 轮排序\n",i+1); 11 12 // 假设 i 是最小值的索引 13 int min = i; 14 15 // 内层控制每轮的比较次数 16 // 第一步:找出最值 17 for (int j = i+1; j<length; j++) { 18 // 升序排列:找出最值的索引 19 if(array[j] < array[min]){ 20 min = j; 21 } 22 } 23 24 // 第二步:交换位置 25 // 如果找出的实际最小索引 不是 假定的索引 26 if (min != i) { 27 28 int temp = array[i]; 29 array[i] = array[min]; 30 array[min] = temp; 31 } 32 33 // 打印排序结果 34 for (int i = 0; i < length; i++) { 35 printf("%d ",array[i]); 36 } 37 printf("\n---------------------\n"); 38 39 } 40 41 printf("\n最终排序结果\n"); 42 for (int i = 0; i < length; i++) { 43 printf("%d ",array[i]); 44 } 45 printf("\n"); 46 47 return 0; 48 }
日志信息