希尔排序
特殊的,当SheelSort()的d=1时,为直接插入排序
#include <bits/stdc++.h>
using namespace std;
#define ElemType int
//typedef int ElemType;
typedef struct {
ElemType r[100];
int length;
}Sheel;
void SheelSort(Sheel &l,int d = 1){
int i = 0,j = 0;
for(i = 1+d;i<=l.length;i++){
l.r[0] = l.r[i];
for(j = i-d;j>0&&l.r[j]>l.r[0];j=j-d){
l.r[j+1*d] = l.r[j];
}
l.r[j+d] = l.r[0];
}
}
int main(){
int n = 12+1;
int A[] = {5,2,4,7,3,16,89,71,2,9,3,6};
int ds[] = {5,3,1};
Sheel l;
for(int i = 0;i<n;i++){
l.r[i+1] = A[i];
l.length++;
}
for(int i = 0;i<3;i++){
SheelSort(l,ds[i]);
}
for(int i = 1 ;i<n;i++){
printf("%d\t",l.r[i]);
}
return 0;
}

浙公网安备 33010602011771号