简单选择排序

 一、实现思想

  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;
            }
    }
}

 

posted on 2020-07-25 23:31  Coderon  阅读(177)  评论(0编辑  收藏  举报