算法原理:把序列左边作为有序序列,右边作为无序序列,刚开始有序序列只有第一个元素,之后的元素都在无序序列,因为只有一个元素的序列肯定是有序的,从无序序列的前往后,每次取一个元素key插入前面的有序序列,找key的插入位置是从有序序列的最后一个元素往前找,每遇到一个大于key的元素都把它往后挪一位,直至找到一个小于key的元素a[ j ],把key插到该元素后面。
以下为模拟直接插入排序图:
代码如下:
#include <stdio.h>
//直接插入排序
void insertsort(int a[],int n);
int main ()
{
int a[11]={6,1,2,7,12,8,5,4,3,9,15};
insersort(a,11);
return 0;
}
void insertsort(int a[],int n,int d,int x){
for(int i=x+d;i<n;i=i+d){
int j=i-d;
int key=a[i];
while(j>=0&&a[j]>key){
a[j+d]=a[j];
j=j-d;
}
a[j+d]=key;
}
for(int i=0;i<n;i++){
printf("%d",a[i]);
if(i!=n-1){
printf(" ");
}
}
}