插入排序(Insertion Sort)通过对未排序的元素逐个插入已排序的合适的位置而完成排序工作,其排序流程如下:
1.对数组的前两个元素进行排序。
2.将第三个元素和前两个已经排好序的元素进行比较,并且插入到合适的位置。
3.和第二步同样的方法对剩下的所有元素进行排序,最后便可得到按照从大到小的顺序排好数组中的各元素。
具体过程如下:
初始数据:23 33 15 12 53
一次排序:23 33 15 12 53
二次排序:15 23 33 12 53
三次排序:12 15 23 33 53
四次排序:12 15 23 33 53
下面附详细C语言源代码:
#include<stdio.h>
#include<malloc.h>
void InsertionSort(int *a,int len);
void main()
{
int len;
int *a;
while(1)
{
printf("输入该排序数组长度:");
scanf("%d",&len);
a=(int*)malloc(len*sizeof(int));
printf("输入数组各元素:\n");
for(int i=0;i<len;i++)
{
scanf("%d",a+i);
}
InsertionSort(a,len);
}
free((void*)a);
}
void InsertionSort(int *a,int len)
{
for(int i=1;i<len;i++)
{
int j=i-1;
int temp=a[i];
while(temp<a[j]&&j>=0)
{
a[j+1]=a[j];
j--;
}
a[++j]=temp;
printf("%d次排序后:",i);
for(int k=0;k<len;k++)
{
printf("%d ",a[k]);
if(k==len-1) printf("\n");
}
}
}
附运行截图:
该程序在VC++6.0上编译通过,执行正确,如果发现错误希望可以及时通知本人,大家一起学习。