看了一下希爾排序算法的思想,終於可以自己用代碼把它寫出來。代碼雖然冗長,但總的來說,基本能把希爾排序的思體現出來。
總的思想是:把一個數據集合依次進行減半分組,然後分別對每組進行直接插入排序。
#include<iostream>
using namespace std;
void ShellSort(int arry[], int n)
{
int i, j, gap;
int k, temp, l;
for (gap = n / 2; gap > 0; gap /= 2) //取步長
{
for (i = 0; i < gap; i++) //進行gap次直接插入排序
{
for (j = i + gap; j < n; j += gap)
{
k = j - gap;
temp = arry[j];
//從小到大進行排序
while (k >= 0 && arry[j] < arry[k])
k -= gap;
//到這一步,說明找到插入的位置(k + gap)了
//移動插入
for (l = j - gap; l > k; l -= gap)
arry[l + gap] = arry[l];
arry[k+gap] = temp;
}
}
}
}
int main()
{
cout << "排序前的數據爲:";
int a[10], i;
for (i = 0; i < 10; i++)
{
a[i] = rand() % 10 + 1;
cout << a[i] << " ";
}
cout << endl;
cout << "排序後的數據爲:";
ShellSort(a, 10);
for (i = 0; i < 10; i++)
cout << a[i] << " ";
cout << endl;
return 0;
}