
#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;

}