希尔排序是插入排序的一种
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
//希尔排序
void shell_sort(int* arr,int length){
int increment = length / 3 + 1; //间隔
while(increment >= 1){
for(int j = increment;j < length;++j){
int temp = arr[j];
int k = j - increment; //移动元素
while(k >= 0 && arr[k] > temp){
arr[k + increment] = arr[k];
k -= increment;
}
arr[k + increment] = temp;
}
if(increment == 1){
break; //间隔已经是1,退出循环
}
increment /= 3;
++increment; //重新取间隔
}
}
void print_arr(int* arr,int length){
cout << "[";
for(int i = 0;i<length;++i){
cout << arr[i] << (i == length -1 ? "" : ", ");
}
cout << "]" << endl;
}
int main() {
ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
int arr[] = {1,6,8,3,6,9,7,4,2,3,6,-10,5,4,8,3,10,12};
int length = sizeof(arr) / sizeof(int);
shell_sort(arr,length);
print_arr(arr,length);
return 0;
}