C/C++教程

C笔记 - 算法:选择排序

本文主要是介绍C笔记 - 算法:选择排序,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

选择排序

1 - 选择排序(Selection-sort)是一种简单直观的排序算法

2 - 工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置

      然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾

      以此类推,直到所有元素均排序完毕

3 - 它表现最稳定的排序算法之一,无论什么数据进去都是 O(n2) 的时间复杂度

      唯一的好处可能就是不占用额外的内存空间

4 - 代码示例

 1 #import <Foundation/Foundation.h>
 2 
 3 int main(int argc, const char * argv[]) {
 4     @autoreleasepool {
 5 
 6         // 随便搞个数组
 7         int array[] = {5,3,12,6,2,10};
 8         int length = sizeof(array)/sizeof(array[0]);
 9 
10         
11         // 外层控制轮数: 需要(leng - 1)次
12         for (int i = 0; i < length-1; i ++) {
13 
14              printf("第 %d 轮排序\n",i+1);
15             
16             // 假设 i 是最小值的索引
17             int min = i;
18 
19             // 内层控制每一轮的比较次数
20             for (int j = i+1; j<length; j++) {
21 
22                 // 升序:遍历最小值(索引)
23                 if(array[j] < array[min]){
24                     min = j;
25                 }
26             }
27 
28             // 交换位置:如果最小索引不是假定的索引
29             if (min != i) {
30                 int  temp = array[i];
31                 array[i] = array[min];
32                 array[min] = temp;
33             }
34             
35             // 打印排序结果
36             for (int i = 0; i < length; i++) {
37                 printf("%d  ",array[i]);
38             }
39             printf("\n---------------------\n");
40             
41         }
42 
43         printf("\n最终排序结果\n");
44         for (int i = 0; i < length; i++) {
45             printf("%d  ",array[i]);
46         }
47         printf("\n");
48 
49     }
50     return 0;
51 }

日志输出

 

这篇关于C笔记 - 算法:选择排序的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!