希尔排序其实是直接插入排序的一种优化,给定一个整数n,将一个序列分成若干组,每一组相邻数据间隔为n,每一组都进行直接插入排序,然后不断缩小n值,直到n值为1,这时就完成了全部的排序。
以下是详细代码:
#include<iostream>
using namespace std;
void InsertSortWithGap(int arr[], int n, int gap){
int key;
int j = 0;
for (int i = 0; i < n; ++i){
key = arr[i];
for ( j = i - gap; j >= 0 && arr[j] > key; j = j - gap){
arr[j + gap] = arr[j];
}
arr[j + gap] = key;
}
}
void ShellSort(int arr[], int n){
int gap = (n / 3) + 1;
while (1){
gap = (gap / 3) + 1;
InsertSortWithGap(arr, n, gap);
if (gap == 1)
break;
}
}
int main(){
int arr[] = { 2, 5, 0, 3, 7, 4, 8 };
int length = sizeof(arr) / sizeof(int);
ShellSort(arr, length);
for (int i = 0; i < length; ++i){
cout << arr[i];
}
return 0;
}