【初阶数据结构】详解插入排序 希尔排序(内含排序的概念和意义)

点点关注

文章目录

  • 前言
  • 1. 排序的概念及其应用
    • 1.1 排序的概念
    • 1.2 排序的应用
  • 2. 插入排序
    • 2.1 基本思想
    • 2.2 插入排序的代码实现
    • 2.3 插入排序算法总结
  • 3. 希尔排序
    • 3.1 基本思想
    • 3.2 希尔排序的代码实现
    • 3.3 希尔排序的特征总结

前言

初级数据结构系列已经进入到了排序的部分了。相信大家听到"排序"这个词,第一时间会想到冒泡排序,因为这个是大家学习C语言时,遇到的第一个真正意义上的排序算法。那么在这个系列中,有八大排序算法,都会给大家一一讲解它的实现思路,以及对应的代码实现!

那么在本文中,我们就开启排序算法的第一个章节 —— “插入排序” 和 “希尔排序”。
哈哈哈

1. 排序的概念及其应用

在正式讲解插入排序和希尔排序之前,我要带着大家理解我们为什么需要排序?以及排序在我们生活中有什么应用?学完这些之后,大家也许对排序算法就不会那么迷茫了。

1.1 排序的概念

排序:所谓排序,就是时一串记录,按照我们特定且可行的想法,递增或递减的排列起来的操作。

排序是一项操作!

1.2 排序的应用

看到这里,大家可以打开京东商城,当你想买一台新的手机时,却不知如何入手。你可能会选择按好评数来进行排序,从而选出好评率最高的手机。在这个过程,就用到了排序的思想。

在这里插入图片描述

再如,我们的大学按照教学资源以及教学能力,也能进行排序:
大学排名
当然,生活中还有很多例子都是用到了排序的思想。这就是所谓处处有排序!

好了,在了解完排序的重要性之后,我们就要正式迈入学习插入排序和希儿排序的殿堂中了。
哈哈哈

2. 插入排序

插入排序,通常我们也称它为直接插入排序。

2.1 基本思想

在一个有序的数组中,按照一定的规则插入待排序的数字。

详细一点说的话,就是:

算法思路:
先从单趟排序讲起,我们可以选择待插入的数字与从排序好的数组末端的数进行比较。若发现该值比待插入的数字要大,则将盖子往后挪动一位,接着继续往前面进行比较。若发现该值比待插入的数字要小,说明该值的后面一个位置就是待插入数字应该插入的位置,我们就可以结束循环了。

单趟排序讲完了之后,就可以将一个完整的插入排序了。
如果你真的认证解读了单趟插入排序的思路,你会发现插入排序不过如此!

其实一个完成的插入排序就是在循环地跑单趟排序,循环地初始条件为从待插入数组的第二个元素小标开始。每当单趟排序跑完之后,我们都得设置循环条件的值(一开始比较数组末端的位置)。因为你已经排好了部分数组,每当来一个新数字就得在拍好数组中插入,重复上述过程。

下面我给大家展示插入排序算法的动图,希望大家能够结合上述的话语,仔细观看:

插入排序

2.2 插入排序的代码实现

void InsertSort(int* a, int n)
{for (int i = 1; i < n; i++){int end = i - 1; //待排序数组的末端//也可以写成int tmp = a[end + 1]; int tmp = a[i];  //tmp存放的是待插入的数值while (end >= 0){if (tmp < a[end]) //待插入数字与数组末端的值进行比较{a[end + 1] = a[end];end--;}else{break;}}a[end + 1] = tmp;}}

2.3 插入排序算法总结

根据上面的代码,我们可以总结出一些关于插入排序算法的特征:

  1. 元素集合越接近有序,直接插入排序算法的时间效率就越高
  2. 时间复杂度:O(N^2)
  3. 空间复杂度:O(1),它是一种稳定的排序算法
  4. 稳定性:稳定

3. 希尔排序

希尔排序又称缩小增量排序。

3.1 基本思想

先选定一个整数(gap),把待排序的数据分成个别组。分组的标准就是所有距离为gap的数据分在同一组,并对每一组内的记录进行排序。然后,缩小gap的值,重复上述分组和排序的工作。当gap = 1时,就相当于直接插入排序了。

上面这个思想很重要,是理解希尔排序的核心!

给大家举个例子:
分组情况

3.2 希尔排序的代码实现

void ShellSort(int* a, int n)
{int gap = n;while (gap > 1){//gap /= 2;gap = gap / 3 + 1;for (int j = 0; j < gap; j++){//就是在对每组(隔gap位置的数字)的数据进行插入排序for (int i = j; i < n; i += gap){int end = i - 1;int tmp = a[i];while (end >= 0){if (tmp < a[end]){a[end + 1] = a[end];end--;}else{break;}}a[end + 1] = tmp;}}}

3.3 希尔排序的特征总结

  • 希尔排序是对直接插入排序的优化。
  • 当gap > 1时都是预排序,目的是让数组更接近于有序。当gap == 1时,数组已经接近有序的了,这样就会很快。这样整体而言,可以达到优化的效果。我们实现后可以进行性能测试的对比。
  • 希尔排序的时间复杂度不好计算,因为gap的取值方法很多,导致很难去计算。但是我们一般认为希尔排序算法的时间复杂度为O( N ∗ l o g N N*log N NlogN),但是如果我们是追求一个严谨读者,那它的时间复杂度为O(N1.3)。

好了,到这里本文就结束了。如果觉得本文还不错的话,麻烦给偶点个赞吧!
哈哈哈

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

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

相关文章

DolphinScheduler 资源中心无法上传大文件

服务&#xff1a;dolphinscheduler 版本&#xff1a;v3.16 问题描述&#xff1a;资源中心-文件管理中使用文件上传是出现中断或上传失败 排除思路&#xff1a; 测试小文件或其他类型文件时是否正常&#xff1b;F12查看接口调用成功以及失败时的对比&#xff0c;发现接口调用…

内核级理解套接字和全连接队列

一、全连接队列 listen 函数第二个参数 backlog 是输入全连接队列的长度&#xff0c;一般不会太大。那如何理解全连接队列呢&#xff1f; 首先三次握手建立连接的过程和服务器是否 accept 无关&#xff0c;accept 的本质就是把已经建立的连接以文件描述符的形式返回。 那么在…

[含文档+PPT+源码等]精品大数据项目-基于Django实现的高校图书馆智能推送系统的设计与实现

大数据项目——基于Django实现的高校图书馆智能推送系统的设计与实现背景&#xff0c;可以从以下几个方面进行详细阐述&#xff1a; 一、信息技术的发展背景 随着信息技术的飞速发展和互联网的广泛普及&#xff0c;大数据已经成为现代社会的重要资源。在大数据背景下&#xf…

言语理解(3)

如果选项中填写的第一句话是文言文&#xff0c;那么尤其要注意它后面的第一句话 D B 要注意要填写的句子后面最近的一句话 文艺和时代和文章中的主题词&#xff0c;B和D的区别就是文艺带动时代向前发展&#xff0c;D是文艺和时代互相影响&#xff0c;从全文可知是文艺影响时代带…

墙绘艺术市场的数字化转型:SpringBoot案例

1 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规范化管理。这样的大环境让那些止步不前&#…

常州威雅学校:欢迎探访校园,共赴全人教育之旅!

自2012年创校起&#xff0c;我们践行着“每一个孩子都卓越”的全人教育理念&#xff0c;见证了常州威雅发展至今天的方兴未艾。在岁月不居&#xff0c;时节如流间&#xff0c;我们用点点滴滴的耕耘&#xff0c;为学生的成长穿针引线&#xff0c;也在学校建设中精益求精。 一百次…

计算机毕业设计 服装生产信息管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

Golang | Leetcode Golang题解之第449题序列化和反序列化二叉搜索树

题目&#xff1a; 题解&#xff1a; type Codec struct{}func Constructor() (_ Codec) { return }func (Codec) serialize(root *TreeNode) string {arr : []string{}var postOrder func(*TreeNode)postOrder func(node *TreeNode) {if node nil {return}postOrder(node.Le…

SQL第10课挑战题

1. 从OrderItems表中返回每个订单号order_num各有多少行数order_lines&#xff0c;并按order_lines对结果进行排序 2. 返回名为cheapest_item的字段&#xff0c;该字段包含每个供应商成本最低的产品&#xff08;使用products表中的prod_price)&#xff0c;然后从最低成本到最高…

CMOS Sensor调试笔记

最近在调CMOS Sensor&#xff1b;基于无ISP的芯片。 第一步&#xff0c;找模组厂要到对应Sensor对应分辨率&#xff0c;YUV信息的驱动。 第二步&#xff0c;确认信号的极性&#xff0c;VSYNC&#xff0c;SYNC, PCLK。 第三步&#xff0c;开始测试。 问题解决&#xff1a; 1&am…

Unity Asset Store的默认下载位置及更改下载路径的方法

修改Unity Asset Store的默认下载路径 Unity Asset Store默认下载位置 Unity Asset Store里下载资源&#xff0c;默认是下载到C盘里的&#xff0c;如果你不想做C盘战士的话&#xff0c;记得将下载的资源转移到其他盘。 Unity商城默认下载路径是C:\用户\用户名&#xff08;一般…

ZYNQ: GPIO 之 MIO 控制 LED 实验

GPIO 之 MIO 控制 LED 实验目的 使用 GPIO 通过两个 MIO 引脚控制 PS 端两个 LED 的亮灭&#xff0c;实现底板上 PS_LED0、PS_LED1 两个 LED 灯同亮同灭的效果。 简介 ZYNQ PS 中的外设&#xff08;如 USB 控制器、UART 控制器、I2C 控制器以及 GPIO 等等&#xff09;可以通…

哈希表和字符串哈希算法

哈希 哈希表&#xff08;Hash Table&#xff09;是一种数据结构&#xff0c;它可以通过一个哈希函数将键&#xff08;key&#xff09;映射到存储位置&#xff0c;从而实现高效的数据查找、插入和删除操作。哈希表的特点是能够在常数时间&#xff08;O(1)&#xff09;内完成查找…

【韩顺平Java笔记】第4章:运算符

文章目录 61. 上一章总结62. 算术运算符介绍62.1 运算符介绍62.2 算术运算符介绍62.3 算术运算符一览 63. 算术运算符使用64. 算术运算符练习165. 算术运算符练习266. 67. 算术运算符练习3,468. 关系运算符介绍68.1 关系运算符介绍68.2 关系运算符一览 69. 关系运算符使用70. 逻…

仿真设计|基于51单片机的温湿度及PM2.5监测系统仿真

目录 具体实现功能 设计介绍 51单片机简介 资料内容 仿真实现&#xff08;protues8.7&#xff09; 程序&#xff08;Keil5&#xff09; 全部内容 资料获取 具体实现功能 &#xff08;1&#xff09;LCD1602液晶第一行显示当前的PM2.5值&#xff0c;第二行显示当前的温度…

观测云对接 SkyWalking 最佳实践

简介 SkyWalking 是一个开源的 APM&#xff08;应用性能监控&#xff09;和可观测性分析平台&#xff0c;专为微服务、云原生架构和基于容器的架构设计。它提供了分布式追踪、服务网格遥测分析、度量聚合和可视化一体化的解决方案。如果您的应用中正在使用SkyWalking &#xf…

25中国烟草校园招聘面试问题总结 烟草面试全流程及面试攻略

开头附上工作招聘面试必备问题噢~~包括综合面试题、无领导小组面试题资源文件免费&#xff01;全文干货。 工作招聘无领导小组面试全攻略最常见面试题&#xff08;第一部分&#xff09;共有17章可用于国企私企合资企业工作招聘面试面试必备心得面试总结资源-CSDN文库https://d…

家庭教育研究编辑部家庭教育研究杂志社2024年第14期目录

特别关注 幼儿园主题课程生活化资源的开发与利用 包丽梅1-3 探讨提高小学信息科技教学效率的策略 王小峰4-6 幼儿园实施体育游戏教学的策略研究 邵惇妹7-9 中华优秀传统文化融入小学德育课堂策略探究 梁叶华10-12 幼儿园新生入园分离焦虑研究 郭舒苗13-15 协同育人 …

实验5 预备实验2-配置单个的路由器

配置单个的路由器 一、实验目的 此次试验目的是了解思科网络设备的配置基本特点及IOS命令基本操作方法。这些是配置思科设备的重要前提。 二、实验内容及结果 1、实验环境搭建 添加一个模块化的路由器&#xff0c;单击Packet Tracer 5.3的工作区中刚添加的路由器&#xff0c;…

基于无人机图像的洪水灾害受损评估分割数据集,共4494张高清无人机图像,10个类别,共22GB数据量,主要关注道路,建筑的受损情况。洪水应急救援

洪水应急救援&#xff0c;基于无人机图像的洪水灾害受损评估分割数据集&#xff0c;共4494张高清无人机图像&#xff0c;10个类别&#xff0c;共22GB数据量&#xff0c;主要关注道路&#xff0c;建筑的受损情况。 洪水应急救援&#xff0c;基于无人机图像的洪水灾害受损评估分…