//插入法排序

//插入法排序
/*
first~有序序列的插入算法
希尔排序】: 又称缩小增量排序,
是对直接插入排序的优化 ,
如下图所示 , 以3为间隔 ,
每次进行排序 , 使数组接近于有序 ,
这样就能减少元素后移的次数 ,
 这样在大量数据排序时 ,
 效率会大大提高 ;
 在下面的测试中会有明显的差别
 */
//将任意读入的整数x 插入一个升序数列后,
//数列仍案升序排列
//要领:每读入一个数立即插入到最后存放的数组中
//,每次插入都是该数列有序
/*    #include<stdio.h>
    #define n 10
    int main(int argc,char const *argv[])
    {
        int a[n];
        int i,j,k,x;
        scanf("%d",&a[0]);
        for(j=1;j<n;j++)
        {
            scanf("%d",&x);
            if(x>a[j-1])
            {
                a[j]=x;
            }else
            {
                i=0;
                while(x<a[i]&&i<=j-1)
                {
                    i++;
    //以下for循环从最后一个数开始直到待插位置上依次后移一位
                    for(k=j-1;k>=i;k--)
                    {
                        a[k+1]=a[k];
                    }
                    a[i]=x;
                }
            }
        }
        for(i=0;i<n;i++)
        {
            printf("%d ",a[i]);
        }
        return 0;
    }
*/
#include<stdio.h>
int main(int argc,char const *argv[])
{
    int i,j,k,x,n;
    int t=0;
    scanf("%d",&n);  //先确定这组数有多少个数
    int a[n];
    scanf("%d",&a[0]);
    while(t<n)
    {
        t++;  
        scanf("%d",&x);
        if(x>a[t-1])
        {
            a[t]=x;
        }else
        {
            i=0;
            for(i=t;i>=0;i--)
            {
                a[i]=a[i-1];
                if(x>a[i-2])
                {
                    a[i-1]=x;
                    break;
                }
            }
        }
    }
    for(i=0;i<n;i++)
    {
        printf("%d ",a[i]);
    }
    return 0;
}
 

猜你喜欢

转载自www.cnblogs.com/lijianmin6/p/10398492.html