好程序都有小心思

废话不多说,直接上代码,只有十六行

#include<stdio.h>

void InsertSort(int a[],int n)
{
    int i,j;
    int temp;

    for(i=1;i<n;i++)               //执行n-1趟插入
    {
        temp=a[i];                 //将要插入的数暂存到temp
        j=i-1;
        while(j>=0 && temp<a[j])   //找出temp的插入位置
            a[j+1]=a[j--];         //将a[j]后移,再将j减1
        a[j+1]=temp;               //将temp插入到指定位置
    }
}

      很多人不理解插入排序,这个就像我们每个打牌时自己抓牌后的理牌过程,假设都是把小牌往前整理,也就是从小到大排好,在数组里就是要把一个数放到合适的位置。

     本代码简单,但也有精彩和紧凑的部分,核心代码就是最后带注释的三句,前两句是把数组中较大的数向后移动,第三句 a[j+1]=temp;  是把数放到合适的位置。核心中的核心是 a[j+1]=a[j--];这句设计得比较巧妙,言简意赅。把一个数向后交换,很多基础差的可能看不懂。我觉得是可以作为面试题出的,当j =0 是,= 运算符是从右向左结合,先计算a[i--]  右面是a[0],左面是a[1] 整体是a[1]=a[0]。以此类推。

     程序如人生,及时简单的几句,像一句简单的问候或送朋友的一件小礼物,也能显出你的心思和想法。


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值