假定排序规则是递增的,直接插入排序的思路就是找到一数,这个数前面(数组首部)的数比它大,从这个数开始往前遍历,只要是比它大的都往后位移,直到比它小的为止,将这个数插入在这里。多次后就完成了直接插入排序。
比如我们定义了一个数组
那么第一次找到的数就是1,从1开始往前(数组首部)遍历,5 > 1,将5放到1的位置上。直到到将2挪到原来3的位置上,将1放在原来2的位置上,就完成了一趟。可以看出,后移的过程中是需要一个额外的变量来保存我们找到的数。
源代码如下:
//
// 直接插入排序
//
// Created by GPH on 14-5-3.
// Copyright (c) 2014年 GPH. All rights reserved.
//
#include <stdio.h>
#include <stdlib.h>
void insertSort(int a[],int length)
{
int tmp = 0;
int i,j;
for (i = 1; i < length; i++)
{
if (a[i] < a[i-1])
{
tmp = a[i];
for (j = i-1; tmp < a[j]; j--)
{
a[j+1] = a[j];
}
a[j+1] = tmp;
}
}
}
int main()
{
int a[10] = {3,2,5,1,6,8,7,9,0,4};
insertSort(a, sizeof(a)/sizeof(a[0]));
for (int i = 0; i < 10; i++)
{
printf("%d ",a[i]);
}
return 0;
}
结果如图: