SuperHakce 算法实践之希尔排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SuperHakce 算法实践之希尔排序相关的知识,希望对你有一定的参考价值。

希尔排序:

Shell Sort 是改进直接插入排序的一种插入排序,又叫缩小增量排序法,其选择一组逐渐缩小的增量对待排数据进行分组排序,因为其可以大跨度的交换 2 个数据,所以其算法复杂度为 O(nlogn);因为一次增量排序就是跨度为 d 的直接插入排序,所以一次增量排序是稳定的原址排序,但是整个希尔排序是不稳定的非原址排序

Shell Sort 适合 n 比较大的数据

给定实例的shell排序的排序过程

假设待排序文件有10个记录,其关键字分别是:

49,38,65,97,76,13,27,49,55,04。

增量序列的取值依次为:

5,3,1

排序过程:

技术分享

源代码:

#include <iostream>
using namespace std;
void shellSort(int map[],int length,int d);
int main(){
    int map[1000];
    int number;
    cin >> number;
    for(int i = 0;i < number;i ++){
        cin >> map[i];
    }
    shellSort(map,number,number / 2);
    for(int i = 0;i < number;i ++){
        cout << map[i] << " ";
    }
    cout << endl;
}
void shellSort(int map[],int length,int d){
    for(int i = 0;i <= length - d;i ++){
        for(int j = i + d;j <= length - 1;j ++){
            if(map[j] < map[j - d]){
                int temp = map[j];
                map[j] = map[j - d];
                map[j - d] = temp;
            }
        }
    }
    int dT = d / 2;
    if(dT == 0)
       return;
    shellSort(map,length,dT);
}

本文出自 “SuperHakce” 博客,请务必保留此出处http://superhakce.blog.51cto.com/6671637/1904277

以上是关于SuperHakce 算法实践之希尔排序的主要内容,如果未能解决你的问题,请参考以下文章

SuperHakce 春招备战算法实践之堆排序

排序算法之希尔排序

排序算法之希尔排序

图解排序算法之希尔排序

图解排序算法之希尔排序

图解排序算法之希尔排序