希尔排序
1. 算法步骤
选择一个增量序列,很明显我们可以用一个序列来表示增量:{n/2,(n/2)/2…1},每次增量都/2
按增量序列个数 k,对序列进行 k 趟排序;
每趟排序,根据对应的增量 step,将待排序列分割成若干长度为 m 的子序列,分别对各子表进行直接插入排序。仅增量因子为 1 时,整个序列作为一个表来处理,表长度即为整个序列的长度。
#include<iostream>
using namespace std;
int main()
{
int a[10];
int n;
int temp;
cin >> n;
for (int i = 0; i < n; i++)
cin >> a[i]; // 61 17 29 22 34 60 72 21 50 62
//希尔排序
for (int step = n / 2; step >=1; step /= 2)
{
for (int i = step; i < n; i++)
{
temp = a[i];
int j = i - step;
while (j >= 0 && temp < a[j])
{
a[j + step] = a[j];
j = j - step;
}
a[j + step] = temp;
}
}
for (int i = 0; i < n; i++)
cout << a[i] << " ";
}
本文详细介绍希尔排序的原理,通过C++代码示例演示如何使用增量序列对整数数组进行排序。步骤涉及选择增量序列、多趟排序及子序列插入排序的过程。
18万+

被折叠的 条评论
为什么被折叠?



