介绍一个概念,基本有序,就是小的关键字基本在前面,大的基本在后面,不大不小的基本在中间,像{2,1,3,6,4,7,8,2,4,6}这样可以称为基本有序了。
下面给出代码:
#include <iostream>
using namespace std;
void shellSort(int L[], int len)
{
int i, j;
int increment = len;
do
{
increment = increment / 3 + 1;
for (i = increment; i < len; i++)
{
if (L[i] < L[i-increment])
{
int temp = L[i];
for (j = i-increment; j >= 0 && temp < L[j]; j -= increment)
L[j+increment] = L[j];
L[j+increment] = temp;
}
}
} while (increment > 1); //increment最后应为1。
}
int main()
{
int L[10] = { 9, 8, 7, 4, 5, 2, 1, 3, 6, 0};
shellSort(L, 10);
for (int i = 0; i < 10; i++)
{
printf("%d ", L[i]);
}
}