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

}