#include<stdio.h>
//直接插入排序
//插入排序是把一个记录插入到已排序的有序序列中,使整个序列在插入该记录之后仍然有序
//插入排序中较简单的一种方法就是直接插入排序,其插入位置的确定方法是将待插入的记录
//与有序区的各记录自右向左依次比较其关键字的值的大小,本实例要求使用直接插入排序法将数字
//由小到大进行排序
void insort(int s[],int n) //自定义函数insort
{
int i,j,k,count=1;//count计算交换的次数
for(i=2;i<=n;i++)//数组下标从2开始,s[0]做监视哨,s[1]一个数据无可比性
{
s[0]=s[i]; //给监视哨赋值
j=i-1; //确定要比较元素的最右边的位置
while(s[0]<s[j])
{
s[j+1]=s[j]; //数据右移
j--; //移向左边的一个未比较的数
/* //测试结果
printf("第%d次中间结果:\n",count);
for(k=0;k<=10;k++)
printf("%5d",s[k]);
printf("\n");
count++;
*/
}
s[j+1]=s[0]; //在确定的位置插入s[i]
printf("第%d次遍历:\n",i-1);
for(k=1;k<=10;k++)
printf("%5d",s[k]);
printf("\n");
}
}
void main()
{
int a[11],i; //定义数组及变量为基本类型
printf("请输入10个数据:\n");
for(i=1;i<=10;i++)
scanf("%d",&a[i]);
printf("原始顺序:\n");
for(i=1;i<11;i++)
printf("%5d",a[i]);
printf("\n");
insort(a,10);
printf("\n插入数据后排序:\n");
for(i=1;i<11;i++)
printf("%5d",a[i]);
printf("\n");
}
end
MrBread 2017-02-07