考研算法29天:希尔排序 【希尔排序】

这篇具有很好参考价值的文章主要介绍了考研算法29天:希尔排序 【希尔排序】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

算法介绍

希尔排序 = 等差数列 + 普通版插入排序

循环数组

考研算法29天:希尔排序 【希尔排序】

第一次每n/2为间隔分为4组,然后组内排序。

第二次每n/4为间隔分为2组。然后组内排序

第三次n/8为间隔分为一组。然后组内排序。

组内排序用插入排序来排序。

注:也可以第一次为n/3为间隔,第二次为n/3^2,,第三次为n/3^3.这个随你定义。

考研算法29天:希尔排序 【希尔排序】

 上面这个图片是讲采用3的分法的话最坏算法时间复杂度只有O(n*开平方n)。

考研算法29天:希尔排序 【希尔排序】

c++中的sort = 快排 + 插排  

 算法题目

考研算法29天:希尔排序 【希尔排序】

算法ac代码:

#include <iostream>

using namespace std;

const int N = 1000010;
int q[N];

void shell_sort(int n){
    for(int d=n/2;d>=1;d = d/2)//算出每次的公差
    {
        
        for(int start=0;start<d;start++)//每次的开始下标
        {
            //插入排序
            for(int i=start+d;i<n;i=i+d){
                int x = q[i],j=i;
                while(j>start&&q[j-d]>x){
                    q[j] = q[j-d];
                    j = j-d;
                }
                q[j] = x;
            }
            
        }
    }
    return;
}
int main(){
    int n;
    cin>>n;
    for(int i=0;i<n;i++)scanf("%d",&q[i]);
    shell_sort(n);
    for(int i=0;i<n;i++)printf("%d ",q[i]);
    return 0;
}

算法复杂度

时间复杂度:

要看你是按照啥规矩分的组,不同分组的时间复杂度不一样,如果是按照“2”的话时间复杂度为O(N^2)

空间复杂度

O(1)

稳定性:

原先的元素的相对位置会不一样,所以不稳定。

快排和希尔排序时间复杂度最坏情况是不考虑的,其发生这样的情况的概率就如小型星球撞地球的概率一样,可以忽略不计。文章来源地址https://www.toymoban.com/news/detail-502097.html

到了这里,关于考研算法29天:希尔排序 【希尔排序】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • (十三)排序算法-希尔排序

    1.1 概述 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种 插入排序 ,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。希尔排序相比较与插入排序多加了一步就是确定步长。之前在插入排序的过程中,步长是固定的即

    2023年04月14日
    浏览(28)
  • 排序算法:希尔排序

            1959 年 7 月,美国辛辛那提大学的数学系博士 Donald Shell 在 《ACM 通讯》上发表了希尔排序算法,成为首批将时间复杂度降到 O(n²)以下的算法之一。虽然原始的希尔排序最坏时间复杂度仍然是 O(n²) ,但经过优化的希尔排序可以达到 O(n^1.3)甚至O(n^7/6)。       

    2024年02月11日
    浏览(30)
  • 排序算法-插入/希尔排序

    直接插入排序是一种简单的插入排序法,其基本思想是: 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。 当插入第i(i=1) 个元素时,前面的 array[0],array[1],…,array[i-1] 已经排好序,此时用

    2024年02月05日
    浏览(29)
  • 排序算法之【希尔排序】

      📙 作者简介:  清水加冰,目前大二在读,正在学习C/C++、Python、操作系统、数据库等。 📘 相关专栏: C语言初阶、C语言进阶、C语言刷题训练营、数据结构刷题训练营、有感兴趣的可以看一看。 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误还望各路大佬指正! ✨每一次努力

    2024年02月08日
    浏览(29)
  • 排序算法-----希尔排序

    目录 前言 希尔排序(shell) 排序原理 大致思路 示例  代码实现(C语言) 算法分析 时间复杂度 空间复杂度 稳定性         前面我有一篇插入排序的详细的文章讲解(链接:排序算法-----插入排序(图文详解)_灰勒塔德的博客-CSDN博客)今天我们接着学习排序算法中的希尔

    2024年02月09日
    浏览(25)
  • 【排序算法】希尔排序

    希尔排序是一种经典的排序算法,它通过多次插入排序的方式,以及逐步缩小增量的策略,实现对数据的高效排序,希尔排序法又称缩小增量法。 希尔排序的核心思想在于将待排序的数据分成若干组,对每一组数据进行插入排序。这样做的好处是,一方面可以减少数据的比较

    2024年04月13日
    浏览(22)
  • 排序算法——希尔排序图文详解

    注1:本篇是基于对直接插入排序法的拓展,如果对直接插入法不了解,建议先看看 直接插入排序 注2:本篇统一采用升序排序 希尔排序法又称缩小增量法。 希尔排序其实是直接插入排序的改进。 其 基本思想是 : 先选定一个整数gap,把待排序文件中所有记录分成数组,所有

    2024年02月07日
    浏览(27)
  • 八大排序算法之插入排序+希尔排序

    目录 一.前言(总体简介) 关于插入排序  关于希尔排序: 二.插入排序 函数首部: 算法思路: 算法分析 插入排序代码实现: 插入排序算法的优化前奏:  三.希尔排序(缩小增量排序) 1.算法思想:  2.算法拆分解析  序列分组 分组预排序: 分组预排序的另一种实现方式: 希尔排序的实现

    2023年04月09日
    浏览(35)
  • 排序算法:插入排序(直接插入排序、希尔排序)

    朋友们、伙计们,我们又见面了,本期来给大家解读一下有关排序算法的相关知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏: C语言:从入门到精通 数据结构专栏: 数据结构 个  人  主  页 : stackY、 目录   前言: 1.排序

    2024年02月09日
    浏览(39)
  • 【排序算法】希尔排序!(保姆级教学)

    🎥 屿小夏 : 个人主页 🔥个人专栏 : 算法—排序篇 🌄 莫道桑榆晚,为霞尚满天! 什么是希尔排序?希尔排序是如何实现的?它的思想和由来又是什么? 本文将从多方面,精细的带你了解希尔排序,让你彻底掌握它! 希尔排序(Shell Sort)是一种排序算法,由美国计算机

    2024年02月08日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包