其实也就是将每次寻找的跨度增大了。
下面用一个例子简单解释一下过程:
#include<iostream>
using namespace std;
void insertSort(int k[], int n)
{
int temp;
int i;
int j;
int gap = n;
do
{
gap = gap / 3 + 1;
for (i = gap; i < n; i++)
{
if (k[i] < k[i - gap]) //如果后面的比前面的小,那么就进行交换
{
temp = k[i]; //将需要插入的值保存起来
for (j = i - gap; k[j] > temp; j-=gap) //一个个比较前面的数,直到找到需要插入的位置
{
k[j + gap] = k[j];
}
k[j + gap] = temp;
}
}
} while (gap > 1);
}
int main()
{
int k[10] = { 5,2,3,0,1,6,8,9,11,7 };
insertSort(k, 10);
cout << "排序后的结果是:" << endl;
for (int i = 0; i < 10; i++)
{
cout << k[i] << " ";
}
cout << endl;
system("pause");
return 0;
}