算法——排序之路(二)——希尔排序法(Shell Sort)

来源:互联网 发布:美国先锋集团 知乎 编辑:程序博客网 时间:2024/05/16 12:34

希尔排序法(Shell Sort)

希尔排序法(缩小增量法)属于插入类排序,是将整个无序列分割成若干小的子序列分别进行插入排序的方法。

该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高。

但是这个算法存在不足:不稳定,d = "k" 的取值是多少,应取多少个不同的值,都无法确切知道,只能凭经验来取d = "k"。

学习代码:
#include <bits/stdc++.h>using namespace std;int a[1005];void shell_sort(int *a, int n){int gap;for (gap = n/2; gap > 0; gap /= 2){for (int i = 0; i < gap; i++){for (int j = i+gap; j < n; j += gap){if (a[j] < a[j-gap]){int temp = a[j];int k = j - gap;while (k >= 0 && a[k] > temp){a[k+gap] = a[k];k -= gap;}a[k+gap] = temp;}}}}}int main(){int n;cin >> n;for (int i = 0; i < n; i++) cin >> a[i];shell_sort(a, n);for (int i = 0; i < n; i++) cout << a[i] << " ";cout << endl;return 0;}


1 0