直接插入排序的基本操作是将一个记录插入到已经排好序的有序表中,从而得到你个新的并且记录数增1的有序表。
举例说明其操作过程:
首先将6作为一个有序序列,将2和6比较,显然2<6交换,结果如下图所示:
此时需要把1插入到前面,首先1<6,将6移动到1的位置,1再与2比较,显然1<2,此时将1移动到2的位置,再将2先后移动,结果如下图所示:
此时需要把3插入到前面,首先3<6则将6和3交换,再比较3>2,将2和3互换,结果如下图所示:
依次类推,最终结果为一个有序的序列:
程序实现:
#include<stdio.h>
#include<stdlib.h>
void show(int *p,int length)//显示数组元素
{
int i;
printf("*********\n");
for(i=0;i<length;i++)
{
printf("%d",p[i]);
}
printf("\n");
printf("*********\n");
}
int main()
{
int a[7]={6,2,1,3,5,7,4};
int i,j;
int tmp;//中间变量,用于交换数据
show(a,7);
for(i=1;i<7;i++){
if(a[i-1]>a[i]){
tmp=a[i];
j=i-1;
while(j>=0&&a[j]>tmp){//找合理的插入位置
a[j+1]=a[j];
j--;
}
a[j+1]=tmp;
}
}
show(a,7);
return 0;
}
直接插入排序完。。。