#include <stdlib.h>
#include <stdio.h>
#define SWAP(x,y,t) t=x;x=y;y=t;
void print(int arr[],int n) {
for (int i = 0; i <n; i++) {
printf("%6d", arr[i]);
}
printf("\n");
}
int callInc(int dk){
return dk/3+1;//計算增值量,遞減
}
void shellInsertSort(int arr[],int n,int dk){
int j;
for(int i=dk+1;i<n;i++){
if(arr[i]<arr[i-dk]){
int tmp=arr[i];
for(j=i-dk;j>=0&&tmp<arr[j];j=j-dk){//後移
arr[j+dk]=arr[j];
}
arr[j+dk]=tmp;//插入位置
}
}
if(dk>1){
shellInsertSort(arr,n,callInc(dk));
}else{
print(arr,n);
}
}
//希爾排序
void shellSort(int arr[],int n){
shellInsertSort(arr,n,callInc(n));
}
int main(){
int a[]= { 2,5,3,0,2,3,0,-1,5,6,-2,4,5};
shellSort(a,sizeof(a)/sizeof(int));
return 0;
}