十大排序算法之->希尔排序

一、希尔排序简介

希尔排序,也称为缩小增量排序,是由D.L. Shell于1959年提出的。它的核心思想是将整个待排序的记录序列分割成若干个子序列,这些子序列的元素是相隔一定“增量”的。然后对这些子序列分别进行直接插入排序。随着增量的逐步减小,进行排序的子序列会逐渐增大,直至包含所有元素。当增量减到1时,整个序列恰被分成一组,此时再进行一次直接插入排序,排序过程便结束。

希尔排序的时间复杂度与待排序数组的初始状态有关,最坏情况下时间复杂度为O(n^2),但在大多数情况下,其时间复杂度要优于直接插入排序。

操作过程:

  1. 分组:首先选取一个小于数组长度n的整数作为第一个增量d1,将所有距离为d1的倍数的元素放在同一组中。

  2. 直接插入排序:在每个分组内进行直接插入排序,此时每组都是相对独立的。

  3. 缩小增量:选择第二个增量d2(小于d1),重复上述的分组和排序过程。依次类推,每次选择的增量逐渐减小。

  4. 最终排序:当增量减小到1时,即所有元素都在一个组内,对全体元素进行最后一次直接插入排序以确保整个序列有序。

二、代码实现

# -*- coding: utf-8 -*-
"""
======================================File Name  : shell_sort.pyAuthor     : lanmingyongdate       : 2024/5/10 17:55Description: 希尔排序(Shell Sort)是插入排序的一种优化版本,也被称为缩小增量排序。它的基本思想是将待排序的数组元素按照一定的间隔分组,对每组进行直接插入排序,然后逐渐缩小间隔,再进行排序,直到间隔为1,此时整个序列已经基本有序,最后再进行一次直接插入排序。
希尔排序的时间复杂度与待排序数组的初始状态有关,最坏情况下时间复杂度为O(n^2),但在大多数情况下,其时间复杂度要优于直接插入排序。
=======================================
"""def shell_sort(arr):gap = len(arr)//2while gap:for i in range(gap, len(arr)):index_1 = ifor j in list(range(0, len(arr)))[i - gap::-gap]:if arr[index_1] < arr[j]:arr[index_1], arr[j] = arr[j], arr[index_1]index_1 = jprint("每移动一次后排序结果" + str(arr))print("分{num}分组排序结果".format(num=gap) + str(arr))gap = gap // 2return arrarr = [9, 6, 7, 0, 8, 1, 0, 4, 3]
# arr = [89, 65, 21, 8, 76, 79, 0, 86, 51, 33, 34, 8, 76, 53, 93, 88, 65, 0, 92, 56, 76, 9, 0, 54, 9, 37, 94, 72, 92, 72, 88, 44, 34, 48, 14, 22, 76, 34, 45, 50, 66, 4, 77, 41, 64, 24, 65, 99, 16, 64]print("排序结果:" + str(shell_sort(arr)))# 执行输出
"""
每移动一次后排序结果[8, 6, 7, 0, 9, 1, 0, 4, 3]
每移动一次后排序结果[8, 1, 7, 0, 9, 6, 0, 4, 3]
每移动一次后排序结果[8, 1, 0, 0, 9, 6, 7, 4, 3]
每移动一次后排序结果[8, 1, 0, 0, 3, 6, 7, 4, 9]
每移动一次后排序结果[3, 1, 0, 0, 8, 6, 7, 4, 9]
分4分组排序结果[3, 1, 0, 0, 8, 6, 7, 4, 9]
每移动一次后排序结果[0, 1, 3, 0, 8, 6, 7, 4, 9]
每移动一次后排序结果[0, 0, 3, 1, 8, 6, 7, 4, 9]
每移动一次后排序结果[0, 0, 3, 1, 7, 6, 8, 4, 9]
每移动一次后排序结果[0, 0, 3, 1, 7, 4, 8, 6, 9]
分2分组排序结果[0, 0, 3, 1, 7, 4, 8, 6, 9]
每移动一次后排序结果[0, 0, 1, 3, 7, 4, 8, 6, 9]
每移动一次后排序结果[0, 0, 1, 3, 4, 7, 8, 6, 9]
每移动一次后排序结果[0, 0, 1, 3, 4, 7, 6, 8, 9]
每移动一次后排序结果[0, 0, 1, 3, 4, 6, 7, 8, 9]
分1分组排序结果[0, 0, 1, 3, 4, 6, 7, 8, 9]
排序结果:[0, 0, 1, 3, 4, 6, 7, 8, 9]
"""

:如果代码有错误欢迎指出交流,感谢!!

三、动画演示

图片

 欢迎大家关注我的订阅号,会定期分享一些关于测试相关的文章,有问题也欢迎一起讨论学习!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3029224.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

基于flowable没有规则的并发网关流程跳转记录分析

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; h…

从传统到现代:水表的远程抄表革命

1.引言&#xff1a;技术驱动的转型 在过去的几十年里&#xff0c;我们的生活方式被科技的快速发展深深影响&#xff0c;其中就包括了公用设施的管理方式。传统水表的远程抄表系统就是这样一个例子&#xff0c;它将老旧的手动抄表模式转变为高效、精确的自动化系统。 2.传统水…

JUC下的CompletableFuture详解

详细介绍 CompletableFuture是Java 8引入的一个实现Future接口的类&#xff0c;它代表一个异步计算的结果。与传统的Future相比&#xff0c;CompletableFuture提供了更丰富的功能&#xff0c;比如链式调用、组合异步操作、转换结果、异常处理等&#xff0c;极大地增强了Java在…

C语言:__attribute__((packed))

一、简介 在使用结构体的时候&#xff0c;经常要根据结构体的长度来进行相关判断。但是按照C语言的规则&#xff0c;会对不同类型的数据类型进行自动对齐。有时候就会造成一些问题&#xff0c;如果不需要使用自动对齐的功能&#xff0c;就需要使用到本章的关键字。 二、自动对…

ICode国际青少年编程竞赛- Python-4级训练场-while语句入门

ICode国际青少年编程竞赛- Python-4级训练场-while语句入门 1、 while Flyer.disappear():wait() Dev.step(2)2、 Dev.step(1) while Flyer.disappear():wait() Dev.step(5)3、 while Flyer[0].disappear():wait() Dev.step(3) Dev.step(-1) while Flyer[0].disappear():…

爬虫-无限debug场景 解决方式

解决无限debug 场景1 1. 鼠标右键 选择 continue to here&#xff08;此处不停留&#xff09;2. 鼠标右键 选择 edite breakpoint 设置 10 保证条件不成立 这行永远不执行3.方法置空 1. 方法调用加断点2. 控制台 setInterval function name() {}4. 替换文件 5. hoo…

【CSDN搜材料的小技巧】怎么快速查到高质量最新的内容

问题描述: 我最近搜CSDN已经搜累了&#xff0c;好多东西明显是有问题的&#xff0c;还有一堆人复制粘贴&#xff0c;从海量文章中提取出最新且高质量文章成了当务之急&#xff01; 解决方案: 我本来想写个爬虫按照文章的收藏或者点赞排序的&#xff0c;无意中看到了这篇文章…

msix packaging tool打包问题

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

FreeRTOS学习 -- 任务相关API函数

一、任务创建和删除API函数 FreeRTOS 最基本的功能就是任务管理&#xff0c;而任务管理最基本的操作就是创建和删除任务。 FreeRTOS的任务创建和删除API函数如下&#xff1a; 1、函数 xTaskCreate() 此函数用来创建一个任务&#xff0c;任务需要 RAM 来保存于任务有关的状…

子查询之二(不相关子查询与相关子查询)

1. 相关子查询 如果子查询的执行依赖于外部查询&#xff0c;通常情况下都是因为子查询中的表用到了外部的表&#xff0c;并进行的条件关联&#xff0c;因此每一次执行一次外部查询&#xff0c;子查询都会重新计算一次&#xff0c;这样的子查询称为关联子查询. 相关子查询按照…

VS配置三方依赖

1.配置include 1.1.打开属性 1.2.打开“配置属性”-"C/C"-"常规" 2.配置lib 2.1.配置lib目录 打开"配置属性"-“链接器”-“常规”。 2.2.配置具体的lib 打开"配置属性"-"链接器"-“输入”。 也可以通过代码方式加入&…

【挑战30天首通《谷粒商城》】-【第一天】【10 番外篇】 解决docker 仓库无法访问 + MobaXterm连接VirtualBox虚拟机

文章目录 课程介绍 1、解决docker 仓库无法访问 2、 MobaXterm连接VirtualBox虚拟机 Stage 1&#xff1a;下载MobaXterm选择适合你的版本 Stage 2&#xff1a;vagrant ssh 连接&#xff0c;开启ssh访问 Stage 2-1&#xff1a;su获取root账号权限,输入密码&#xff08;默认vagra…

Visual Studio生成C++的DLL文件(最简单版)

前言 当你在使用C编写一些可重用的代码时&#xff0c;将其打包成一个动态链接库&#xff08;DLL&#xff09;可以使其更容易地被其他项目或者程序调用和使用。Visual Studio提供了一种简单的方式来生成C的DLL文件。下面是一个关于如何在Visual Studio中生成C的DLL文件的简单教…

力扣HOT100 - 215. 数组中第K个最大元素

解题思路&#xff1a; 快速选择&#xff0c;目标是找出数组中第 k 小&#xff08;或第 k 大&#xff09;的元素&#xff0c;而不是对整个数组进行排序。 &#xff08;需要和快排进行区分&#xff0c;快排的目的是排序&#xff09; 注意&#xff1a; i l - 1, j r 1; 为什…

羊大师:羊奶助力宝宝成长无忧

羊大师&#xff1a;羊奶助力宝宝成长无忧 在宝宝的成长过程中&#xff0c;营养是至关重要的。随着人们对健康和营养的日益关注&#xff0c;越来越多的家长开始寻找更优质的食品来喂养宝宝。羊奶作为一种营养丰富、易于消化的天然食品&#xff0c;逐渐成为了家长们的首选。 羊奶…

现场工程师出手--虚拟化软件预留内存过大导致其他程序崩溃问题

项目场景&#xff1a; 一位学生有一台笔记本电脑&#xff0c;安装了Android&#xff0c;Kafka虚拟机很多软件。笔记本配置了20GB内存&#xff0c;固态硬盘&#xff0c;但最近很卡&#xff0c;Android Stuido经常闪退&#xff0c;一些游戏也无法运行。 问题描述 由于Android S…

2024最新洗地机选购攻略!分享四款热门洗地机推荐

洗地机可以说是现代家庭生活中一大利器&#xff0c;它能帮我们快速搞定家里的地板清洁工作&#xff0c;省去了自己清洗滚刷的麻烦。不过&#xff0c;当下市面上洗地机品牌种类繁多&#xff0c;价格区间也相差悬殊&#xff0c;要选择一款性价比较高、使用体验较好的洗地机产品&a…

Vision Mamba:高效视觉表示学习双向状态空间模型,超越Vision Transformer!

DeepVisionary 每日深度学习前沿科技推送&顶会论文分享&#xff0c;与你一起了解前沿深度学习信息&#xff01; Vision Mamba: Efficient Visual Representation Learning with Bidirectional State Space Model 引言&#xff1a;探索视觉领域的新方向 在计算机视觉领域&…

beyondCompare工具

目录 一 资源地址 二 过期处理 一 资源地址 链接&#xff1a;https://pan.baidu.com/s/10TxNj0ZvLh2qusYZCPaGRA?pwduq26 提取码&#xff1a;uq26 二 过期处理 过期后删除对应路径下所有文件&#xff0c;重启软件即可

教你解决PUBG绝地求生游戏中闪退掉线无法重连回去的问题

《绝地求生》&#xff08;PUBG&#xff09;&#xff0c;作为一款在全球范围内掀起热潮的战术竞技游戏&#xff0c;以其栩栩如生的战场环境和令人心跳加速的生存冒险博得了广大玩家的青睐。然而&#xff0c;一些玩家在经历了一场惊心动魄的对局后&#xff0c;却面临了一个不大不…