将数组 a[10] = {7,2,9,4,1,3,8,6,5,0} 从小到大排序并打印结果
插入排序类似抓牌,每抓一张牌与前面抓的对比,从右往左,找到第一个比抓到的牌小的的位置,将后面的元素位置依次后移一位,将新元素插入
#include <stdio.h>
void printA(int *a,int len)
{
int i;
for(i = 0; i < len; i++)
{
printf("%4d",a[i]);
}
printf("\n");
}
void insert(int *a, int len)
{
int get;
int i,j;
for(i = 1; i < len; i++)
{
get = a[i]; //抓牌
j = i-1;
while(j >= 0 && a[j] > get)//找到第一个比抓到的牌小的元素,将右边的元素移位
{
a[j+1] = a[j];
j--;
}
a[j+1] = get; //把抓到的牌插入
}
}
int main()
{
int a[10] = {7,2,9,4,1,3,8,6,5,0};
int len = sizeof(a)/sizeof(a[0]);
insert(a,len);
printA(a,len);
return 0;
}