//插入法排序
Posted lijianmin6
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了//插入法排序相关的知识,希望对你有一定的参考价值。
//插入法排序
/*
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;
}
以上是关于//插入法排序的主要内容,如果未能解决你的问题,请参考以下文章