#include <iostream>
using
namespace std;
void shellSort(
int arr[],
int n)
{
int i, j;
int key;
int h;
for (h = 1; h <= (n-1)/9; h = 3*h + 1)
//得出增量序列 最後增量必定要爲」1「
for (; h > 0; h /= 3)
{
if (h==1)
//輸出一下俺增量爲」4「的時候,排序的結果
{
for(
int i=0;i<n;i++)
cout<<arr[i]<<
" ";
}
for (i = h; i < n; i++)
//這個循環在這裏要走兩遍
{
//當h=4時排序的是相隔三個記錄的兩個值
key = arr[i];
//當h=1時和普通排序是同樣的, //不過已是一個部分有序的序列了!
j = i;
while ((j >= h) && (arr[j-h] > key))
//j>=h是要防止數組越界!
{
arr[j] = arr[j-h];
j -= h;
}
arr[j] = key;
}
}
}
int main()
{
int arr[16] = {9,10, 21, 2, 1, 3, 45, 2, 932, 32, 27, 86, 65, 576, 434, 76753};
int i;
cout <<
"Original array" << endl;
for (i = 0; i < 15; i++)
cout << arr[i] <<
" ";
cout << endl << endl;
shellSort(arr, 15);
cout <<
"Sorted array" << endl;
for (i = 0; i < 15; i++)
cout << arr[i] <<
" ";
cout << endl;
return 0;
}