C语言选择排序法(通俗易懂类型)

选择排序

选择排序法也是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即可。

        剖析图奉上

 

综上所述

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

 运行结果

 

  • 14
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨CX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值