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 }

日志信息

 

posted on 2021-10-24 02:25  低头捡石頭  阅读(36)  评论(0编辑  收藏  举报

导航