看了一下希尔排序算法的思想,终于可以自己用代码把它写出来。代码虽然冗长,但总的来说,基本能把希尔排序的思体现出来。
总的思想是:把一个数据集合依次进行减半分组,然后分别对每组进行直接插入排序。
#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;
}