输入格式:
输入第一行给出正整数N(≤105),随后一行给出N个(长整型范围内的)整数,其间以空格分隔。
输出格式:
在一行中输出从小到大排序后的结果,数字间以1个空格分隔,行末不得有多余空格。
输入样例:
11
4 981 10 -17 0 -20 29 50 8 43 -5
输出样例:
-20 -17 -5 0 4 8 10 29 43 50 981
/*
希尔排序 (:3_ヽ)_写作业
*/
#include<bits/stdc++.h>
using namespace std;
const int MAX = 100010;
int main()
{
int N;
int a[MAX];
scanf("%d", &N);
for(int i = 0; i < N; ++i)
scanf("%d", &a[i]);
//希尔排序
for(int Increment = N / 2; Increment > 0; Increment /= 2)
for(int i = Increment; i < N; ++i)
{
int j, temp = a[i];
//直接插入排序
for(j = i; j >= Increment; j -= Increment)
{
if(a[j - Increment] > temp)
a[j] = a[j - Increment];
else
break;
}
a[j] = temp;
}
for(int i = 0; i < N; ++i)
{
if(i != 0)
printf(" ");
printf("%d", a[i]);
}
}