废话不多说,直接上代码,只有十六行
#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]。以此类推。
程序如人生,及时简单的几句,像一句简单的问候或送朋友的一件小礼物,也能显出你的心思和想法。