选择排序法

选择排序法也是c语言一种简单的排序方法,接下来我再用我自己的理解来解析一下易懂原理。

        为了通俗易懂,继续给一个小的题目来讲解

就是从终端输入5个数,存进数组,然后我们用从小到大的顺序对这个数组进行排序,然后打印在终端。

        首先,选择排序顾名思义,选择二字为核心。而且这种排序方法用一种是用每轮来假设一个下标(这里我们每轮假设一个下标min),然后向后一个个比较选择出本轮需要的下标成为这个min然后交换到自己排序目的的位置。

       第一轮,我们先假设一个最小下标为min = 0;因此data[0]为本轮的最小值,然后我们就用data[0]和后面的data[1]、data[2]、data[3]、data[4],一个个进行比较哪个数小我们就把哪个数对应下标赋值给min,假如data[3]最小那么本轮的min = 3.一轮比较结束然后说明data[min]为这五个数里面的最小值,最后我们只需要我们将data[0]与data[min]换位即可。

        第二轮,最小值在第一轮已经得出,放在data[0]的位置,那么我们现在第二轮就假设min= 1,继续重复第一轮的操作,得出后四个元素相对较小的一个数的下标min,另data[1]与data[min]交换。

        第三轮,以此类推假设min = 2,第四轮,假设min = 3.我们会发现,在第四轮我们只需要选择一次,也就是只需要比较假设的min=3与4即可。

        剖析图奉上

并选择Chinese_PRC_CI_AS排序规则_最小值

 

综上所述

我们5个数只进行了4轮 ,分别选择4次、3次、2次、1次                        再交换

那么n个数进行n-1轮,分别进行n-1、n-2......2次、1次。                再交换

上代码

#include <stdio.h>

int main(void)
{
          int data[5] = {0};//创建五个元素的数组,初始化
          int i = 0;
          int j = 0;
          int len = sizeof(data) / sizeof(data[0]);           //元素的个数在这里len = 5
          int temp = 0;
          int min = 0;//下标

          for(i = 0; i < len ;i++)//循环5次,给数组接收五个随机数
          {
                    scanf("%d",&data[i]);
          }
          printf("排序前:    ");
          for(i = 0;i < len;i++)
          {
                    printf("%5d          ",data[i]);
          }
          printf("\n");

                    /*进行选择排序*/
                    for(i = 0; i < len -1;i++)    //len个数len-1轮
                    {
                              min = i;  //每次选择比较前,假设一个最小值失的下标给min

                              for(j =i + 1;j < len ;j++)//选择
                              {
                                        if(data[min] > data[j])
                                        {
                                                  min = j;
                                        }
                              }

                              temp = data [i];//交换
                              data[i] = data [min];
                              data[min] = temp;
                    }
       

           printf("排序后:    ");
          for(i = 0;i < len;i++)
          {
                    printf("%5d          ",data[i]);
          }
          printf("\n");

          return 0;
}

 运行结果

并选择Chinese_PRC_CI_AS排序规则_排序算法_02