C语言:选择排序,算法归纳总结

C语言:选择排序,算法归纳总结

这个工程课下练习旨在对于字母有疑问,是否可将课上编写的程序对于i和x进行复用呢 ?

思考,不可行,快速排序是通过循环两两间进行了比较,而比较的二者之间呢, 只用一个字母下标来表示是不够的,因为你想想看,如果你拿出了第一个数字来跟第二个比你当然可以直接i+1比较, 但是如果你跟第五个第八个比的时候你怎么办呢?因为你在i+1之后的循环,i初值变为下表为二的第二个数了, 这样你的比较双方一直在后移,而不是单一的固定了第一个值去进行每一个后面数字的比较,所以思考结果可知 快速排序必然后有两个游走下标(自己瞎起的名字)。 一个来固定内层循环固定数与后续的依次比较,另一个则是负责第二个数第三个数去跟他们对应位置后续的比较 故此工程i为输入值,仅为了存值。 x为外层循环(内层第一个数依次比较完之后来找外层大哥)。 y为内层跑腿小弟,大哥派来数字之后,小弟依次去比较。

ps:
这里说了大哥小弟,我也更好理解为何for(x=0;x<9;x++);

  1. 这里要用下x<9,因为大哥就比到第九个数就够了,第九和第十比较,在九做完了就已经完成了,无需再判断十的情况; 问题来了,如果做了第十次(x<10),会怎么样呢?你带入看一下就会知道到了内层循环判定那里自然也就结束了。写了x<10也不会错,只是为了代码高效。
  2. for(y=x+1;x<10;x++),再来看这个,y=x+1;你大可以写y=0,也没错,但是对于代码的高效, y=x+1则直接用大哥吐出来的数字和这数字下一位开始比较了,无需自己再和自己比一遍(因为动笔算你也不会跟数字自己再比一下的不是么)
  3. 以后代码尽量用x表示输入量啊之类的,i和j啊来表示下标
选择排序,数字由大到小排序输出,代码实现
#include <stdio.h>
#include <stdlib.h>

int main()
{
        int a[10];
        int i,x,y,t;
        for(i=0;i<10;i++)
        {
               scanf("%d",&a[i]);
        }
        for(x=0;x<9;x++)
        {
          for(y=x+1;y<10;y++)
         {
                if(a[x]<a[y])
                {
                t=a[x];
                a[x]=a[y];
                a[y]=t;
                }
         }
        }
        for(i=0;i<10;i++)
        {
        printf("%d ",a[i]);
        }

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值