【数据结构】冒泡、选择、插入、希尔排序的完成

news/2025/9/29 13:01:48/文章来源:https://www.cnblogs.com/ljbguanli/p/19118566

【数据结构】冒泡、选择、插入、希尔排序的完成

1. 冒泡排序

1.1 算法思想

冒泡排序(Bubble Sort)是一种简单直观的排序算法。它重复地走过要排序的数组,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数组的工作是重复地进行直到没有再需要交换,也就是说该数组已经排序完成。

1.2 算法步骤

1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这样就将最大的元素移动至最后,相当于这个元素已经排序完成。
3. 针对所有的元素重复以上的步骤,除了已完成排序元素。
4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

特别注意:如果走一轮之后,元素并没有发生任何交换则说明此时排序已经完成,可以提前结束循环。

1.3 动画演示

1.4 代码实现

void swap(int* p1, int* p2)
{int tmp = *p1;*p1 = *p2;*p2 = tmp;
}
void BubbleSort(int* arr, int len)
{int flag = 0;//标记是否交换for (int i = 0; i < len - 1; i++){for (int j = 0; j < len - 1 - i; j++){if (arr[j] > arr[j + 1]){swap(&arr[j], &arr[j + 1]);flag = 1;}}if (flag == 0)//未发生交换,则排序已完成{break;}}
}

2. 选择排序

2.1 算法思想

选择排序(Selection Sort)也是一种比较直观的排序,它通过每次遍历数组选出最小或最大元素,然后与起始或者末尾位置交换,不断缩小区间,依次循环达到排序的目的。

2.2 算法步骤

  1. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
  2. 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
  3. 重复第二步,直到所有元素均排序完毕。

2.3 动画演示

2.4 代码实现

void SelectSort(int* arr, int len)
{for (int i = 0; i < len - 1; i++)//起始位置{int mini = i;for (int j = i + 1; j < len; j++)//寻找最小元素{if (arr[j] < arr[mini]){mini = j;}}swap(&arr[mini], &arr[i]);}
}

优化后:

我们可以同时选择最大与最小的元素,同时往起始与结尾位置交换。

void SelectSort(int* arr, int len)
{int begin = 0;int end = len - 1;while (begin < end){int mini = begin;int maxi = begin;for (int i = begin + 1; i <= end; i++){if (arr[mini] > arr[i]){mini = i;}if (arr[maxi] < arr[i]){maxi = i;}}swap(&arr[mini], &arr[begin]);//如果begin与maxi重合,则需要更新maxiif (begin == maxi){maxi = mini;}swap(&arr[maxi], &arr[end]);begin++;end--;}
}

3. 插入排序

3.1 算法思想

插入排序(Insert Sort)是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。它的思想类似于我们打扑克牌时的整理。

3.2 算法步骤

  1. 将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。
  2. 从尾到头依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)
  3. 依次重复1,2步骤,直至插入完成。

3.3 动画演示

3.4 代码实现

void InsertSort(int* arr, int len)
{for (int i = 0; i < len - 1; i++){int end = i;//从末尾开始插入int tmp = arr[i + 1];//保存插入元素while (end >= 0){if (arr[end] > tmp){arr[end + 1] = arr[end];end--;}else{break;}}arr[end + 1] = tmp;//插入}
}

4. 希尔排序

4.1 算法思想

希尔排序(Shell Sort)是插入排序的一种优化,它先通过gap将整个待排元素序列分割成若干个子序列,然后分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。

希尔排序的本质就是通过gap的预排序让数据接近有序,然后再使用插入排序大大提升插入的效率。

4.2 算法步骤

  1. 选取一个gap对数据进行分组,每间隔gap个元素分为一组,一共gap组。
  2. 以gap为基准单位,对其进行插入排序。
  3. 依次缩小gap的范围,直至gap为1,相当于进行一次正常的插入排序。

4.3 动画演示

4.4 算法实现

void ShellSort(int* arr, int len)
{int gap = len;while (gap > 1){gap = gap / 3 + 1;for (int i = 0; i < len - gap; i++){int end = i;//从末尾开始插入int tmp = arr[i + gap];//保存插入元素while (end >= 0){if (arr[end] > tmp){arr[end + gap] = arr[end];end-=gap;}else{break;}}arr[end + gap] = tmp;//插入}}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GPTEngineer:AI 驱动的Web应用创建平台

GPTEngineer:AI 驱动的Web应用创建平台2025-09-29 12:49 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block …

江西住房和城乡建设部网站中国建筑考试网官网首页

阿里云今年有双十一活动吗&#xff1f;不好说&#xff0c;因为去年就没有。阿里云双11优惠活动是一项大型的促销活动&#xff0c;每年都有&#xff0c;但是去年没有双十一活动&#xff0c;不知道今年2023年阿里云是否有双11优惠活动。但是阿里云百科aliyunbaike.com猜想&#x…

C++----红黑树 - 详解

C++----红黑树 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "…

选对强大的技术底座:一篇文章讲透虚拟机与容器核心差异

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

mp4/图片转gif

mp4转gif ffmpeg -f gif -i name.gif output.mp4 ffmpeg -i output.mp4 -vf palettegen palette.png ffmpeg -i output.mp4 -i palette.png -lavfi paletteuse name.gif基于png图片生成调色板 ffpmpeg -i xx_Wait.gif …

详细介绍:09.【Linux系统编程】“文件“读写操作,Linux下一切皆文件!

详细介绍:09.【Linux系统编程】“文件“读写操作,Linux下一切皆文件!pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: …

数据类型-元组

元组(不可变类型):info = tuple()#空元组  info = (1,2,3,"guohan") 公共功能:1.索引:info[0] = 12.切片:info [0:3] = (1,2,3)3.步长:info [::2] = (1,3)4.for循环:for i in info:5.len: len(in…

深入解析:招聘:解决方案架构师 - 中国北京(混合办公)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

个人用云计算学习笔记 --14( Linux 逻辑卷管理、Linux 交换空间管理) - 教程

个人用云计算学习笔记 --14( Linux 逻辑卷管理、Linux 交换空间管理) - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-fa…

除了网页外 网站还需要东莞有哪些好企业

我一个朋友的网站&#xff0c;5月份时候被攻击了&#xff0c;然后他找我帮忙看看&#xff0c;我看他的网站、网上查资料&#xff0c;不看不知道&#xff0c;一看吓一跳&#xff0c;最近几年这网络安全形势真是不容乐观&#xff0c;在网上查了一下资料&#xff0c;1、中国信息通…

自然灾害vr学习机:山体滑坡+泥石流避险+洪涝逃生+地震逃生+台风避险+雷电避险 - 详解

自然灾害vr学习机:山体滑坡+泥石流避险+洪涝逃生+地震逃生+台风避险+雷电避险 - 详解2025-09-29 12:37 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; o…

站点搭建使用socket登陆wordpress源码

它是一个全面的、企业应用开发一站式的解决方案&#xff0c;贯穿表现层、业务层、持久层。但是 Spring仍然可以和其他的框架无缝整合。 1 Spring 特点 轻量级控制反转面向切面容器框架集合 2 Spring 核心组件 3 Spring 常用模块 4 Spring 主要包 5 Spring 常用注解 bean…

小程序网站建站模板百度网址安全中心

全世界只有3.14 % 的人关注了青少年数学之旅科学是人类进步的阶梯&#xff01;在当今社会&#xff0c;科学技术的发展进步将为人类社会带来巨大的效益&#xff0c;毫不夸张的说&#xff0c;科学指引并推着着人类文明的进程。基础科学作为科学技术的理论基石&#xff0c;其重要性…

详细介绍:XXE - 实体注入(xml外部实体注入)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【面板材料】A股上市公司增发股票及配股相关资料(1991-2024年)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

BindingList的应用与改进

在编写UI的过程中,我们通常使用ObservableCollection来监听列表的变化。然而,ObservableCollection只能在添加/移动/移除元素时通知界面,这意味着元素内部更改时,ObservableCollection是无法通知的 如果需要监听列…

谷歌 SEO 新词 xx animate 等实操教程

如上图,最近 AI 圈又冒出新词:wan animate 等,你们都看到了吗? 今天聊聊 SEO 新词这个"淘金"生意,为什么有些词能做,有些词碰都不能碰。 一、wan animate vs veo3:天壤之别如上图:❌ veo3:打死别碰…

US$248 Xhorse VVDI2 BMW FEM/BDC + Copy 48 Transponder (96 Bit) + MQB Authorization

Xhorse VVDI2 BMW FEM/BDC + Copy 48 Transponder (96 Bit) + MQB Authorization Xhorse Promotion for loyal customers till Christmas!!! This is Authorization Only! No Need Shipping, please pass us serial nu…

完整教程:【读书笔记】架构整洁之道 P6 实现细节

完整教程:【读书笔记】架构整洁之道 P6 实现细节pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas",…

Print Conductor打印软件安装教程!一款非常好用的批量打印软件!支持PDF、Word、Excel、图片等

软件介绍 Print Conductor是一款由国外开发者制作的批量打印软件,支持PDF、Word、Excel、图片等多种格式文件的快速打印。它通过拖拽文件到软件界面即可实现批量打印,无需逐个打开文档,特别适合需要处理大量打印任务…