题目描述
对输入的数进行希尔排序
输入
输入的第一行包含1个正整数n,表示共有n个整数需要参与排序。其中n不超过1000。
第二行包含n个用空格隔开的正整数,表示n个需要排序的整数。
输出
只有1行,包含n个整数,表示从小到大排序完毕的所有整数。
请在每个整数后输出一个空格,并请注意行尾输出换行。
样例输入
10
2 8 4 6 1 10 7 3 5 9
样例输出
1 2 3 4 5 6 7 8 9 10
#include <stdio.h>
int n;
int b[10010];
void shellsort2(int a[], int n)
{
int d, i, j, t,h;
d=5;//d为增量,可以选择合适的数,d=1不变时就是最基本的插入排序
h=2;//h为每次递减的数,也可以视情况选择合适的数
while(d>=1)//最后一次排序时,d必须为1
{
for(i = d; i<n; i++)
for(j = i-d; j>=0; j-=d)
{
if(a[j]>a[j+d])
{
t = a[j];
a[j] = a[j+d];
a[j+d] = t;
}
else
break;
}
d-=h;
}
}
int main()
{
scanf("%d", &n);
int i;
for(i=0; i<n; i++)
{
scanf("%d", &b[i]);
}
shellsort2(b, n);
for(i=0; i<n; i++)
printf("%d ", b[i]);
}