C语言算法实例019:直接插入排序

174 阅读2分钟

实例019:直接插入排序

  • 实例说明:
    插入排序是把一个记录插入到已排序的有序序列中,使整个序列在插入该记录后仍能有序。插入排序中比较简单的一个方法是直接插入排序,其插入位置的确定方法是将待插入的记录与有序区的各记录自右向左依次比较其关键字值得大小。
  • 实现过程:
#include<stdio.h> 

void insort(int s[], int n)
{
    int i, j;
    for(i=2; i<=n; i++)
    {
        s[0]=s[i];
        j=i-1;
        while(s[0]<s[j])
        {
            s[j+1]=s[j];
            j--;
        }
        s[j+1]=s[0];
    }
}

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]);
    insort(a,10);
    printf("\n插入数据后顺序:\n");
    for(i=1; i<11; i++) 
        printf("%5d", a[i]);
        printf("\n");
}
  • 技术要点:
    1.本实例的算法过程
    原始顺序:25, 12, 36, 45, 2, 9, 39, 22, 98, 37
趟数监视哨排序结果
125(12,)25, 36, 45, 2, 9, 39, 22, 98, 37
212(12,25,)36, 45, 2, 9, 39, 22, 98, 37
336(12,25, 36,)45, 2, 9, 39, 22, 98, 37
445(12,25, 36, 45, )2, 9, 39, 22, 98, 37
52(2, 12,25, 36, 45, )9, 39, 22, 98, 37
69(2, 9, 12,25, 36, 45, )39, 22, 98, 37
739(2, 9, 12,25, 36, 39, 45, )22, 98, 37
822(2, 9, 12,22, 25, 36, 39, 45, )98, 37
998(2, 9, 12,22, 25, 36, 39, 45, 98, )37
1037(2, 9, 12,22, 25, 36, 37, 39, 45, 98, )

2.在算法的实现中使用了监视哨,主要是为了避免数据再后移的时候丢失。

  • 实验结果
    这里写图片描述