希尔排序
#include<iostream>
using namespace std;
int n, i, j, d, temp;
void shellsort(int a[], int dk)
{
for(i = dk; i < n; i ++)
{
if(a[i-dk] > a[dk])
{
temp = a[i];
for(j = i - dk; j >= 0 && a[j] > temp; j = j - dk) a[j + dk] = a[j];
a[j + dk] = temp;
}
}
}
int Add(int a[], int dk)
{
while(dk >= 1)
{
shellsort(a, dk);
dk /= 2;
}
return 0;
}
int main()
{
cin >> n;
int a[n];
for(int p = 0; p < n; p ++) scanf("%d",&a[p]);//输入一组数据
int len = sizeof(a)/sizeof(int);//数据长度
int d = len / 2;//第一个增量
shellsort(a,d);//排第一趟
Add(a, d / 2);
for(int p = 0; p < n; p ++) printf("%d ",a[p]);
return 0;
}
还在新手村,若有优化或者错误欢迎大佬指出哈