简单选择排序
一、实现思想
1、从无序区中比较得出一个最值
2、将最值放到有序区
二、代码实现
注意要点
1、交换始终在一个数组进行,为此我们需要知道无序区最值的索引,以便交换
2、主要理解一下i、j就行
1 /* 2 created by coderon 3 time 2020年7月25日23:20:30 4 简单选择排序 5 */ 6 7 #include <stdio.h> 8 void simple_sort(int *p, int length) 9 { 10 int i; //有序区的长度 11 int j; //无序区的长度 12 int index; //记录从无序区挑选出来的一个记录 13 int temp; //中间值,用于交换 14 for (i = 0; i < length - 1; i++) 15 { 16 index = i; 17 for (j = i + 1; j < length; j++) 18 { 19 if (p[j] < p[index]) //修改为>则抽出最大值,为降序排序 20 index = j; 21 } 22 temp = p[index]; 23 p[index] = p[i]; 24 p[i] = temp; 25 } 26 } 27 int main(void) 28 { 29 int a[8] = {1, 2, 3, 4, 5, 6, 7, 8}; 30 simple_sort(a, 8); 31 for (int i = 0; i < 8; i++) 32 { 33 printf("%d ", a[i]); 34 } 35 } 36 /* 37 输出 38 ———————————————————————————————————————— 39 1 2 3 4 5 6 7 8 40 ———————————————————————————————————————— 41 */
补充:另一种选择排序,效率差一点,有点像冒泡,但不是相邻两个交换,注意一下i、j的范围
// 这种方法效率低一些,因为交换的次数太多了 void simple_sort_2(int *p, int length) { int i; int j; int temp; for (i = 0; i < length; i++) { for (j = i + 1; j < length; j++) if (p[j] > p[i]) { temp = p[j]; p[j] = p[i]; p[i] = temp; } } }