直接插入排序:
每次从无序表(原数组)中取出下一个元素,把它插入到有序表的合适位置,使有序表仍然有序。
具体方法是第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从前向后比较,把第三个数按大小插入到有序表中;推而广之,进行了(n-1)趟扫描以后就完成了整个排序过程
它是由两层嵌套循环组成的,外层循环标识并决定待比较的数值次数,内层循环为待比较数值确定其最终位置。当前一数值比待比较数值大的情况下继续循环比较,直到找到比待比较数值小的并将待比较数值置入其后一位置,结束该次循环。
#include <stdio.h>
void insort (int s[],int n)//自定义排序函数 insort
{
int i,j;
for (i=2;i<=n;i++)
{
s[0]=s[i];//s[0] 做监视哨 每次 比较 为其赋值
j=i-1; //建立 循环变量i的副本 从右往左比较
while (s[0] < s[j])
{
s[j+1]=s[j];
j--;
}
s[j+1]=s[0];//在 确定好的位置 上插入 s[i]
}
}
void main()
{
int a[11];
int i;
printf("请输入 10 个数据:");
for (i=0;i<10;i++)
scanf("%d",&a[i]);
printf("原始顺序是: ");
for (i=0;i<10;i++)
printf("%3d",a[i]);
insort(a,10);//调用 自定义函数 insort()
printf("\n插入数据排序后的顺序是:");
for (i=0;i<10;i++)
printf("%3d",a[i]);
printf("\n");
}