原理:一般,讲序列分成n/2组,然后进行排序,后再分为(n/2)/2组,再进行排序,以此类推。
例子:63 92 27 36 45 71 58 7
分组1次:63 92 27 36 45 71 58 7 --》排序:45 71 27 7 63 92 58 36
分组2次:45 71 27 7 63 92 58 36 --》排序:27 7 45 36 58 71 63 92
最后排序:7 27 36 45 58 63 71 92
程序实现
#include<iostream>
using namespace std;
void shellsort(int array[], int len)
{
int i, j, k=1, tmp,jmp=len/2;
while (jmp != 0)
{
for (i = jmp; i < len; ++i)
{
tmp = array[i];
j = i - jmp;
while (tmp < array[j] && j >= 0)
{
array[j + jmp] = array[j];
j = j - jmp;
}
array[j + jmp] = tmp;
}
cout << "第" << k++ << "次排序: ";
for (int m = 0; m < len; ++m)
cout << array[m]<<" ";
cout << endl;
jmp = jmp / 2;
}
}
void main()
{
int a[] = { 63,92,27 ,36 ,45, 71, 58, 7 };
int len = sizeof(a) / sizeof(a[0]);
shellsort(a, len);
system("pause");
}
运行结果