数据结构进阶篇 之【选择排序】详细讲解(选择排序,堆排序)

在这里插入图片描述
民以食为天,我以乐为先
嘴上来的嘘寒问暖,不如直接打笔巨款

一、选择排序

1.直接选择排序 SelectSort

1.1 基本思想

1.2 实现原理

1.3 代码实现

1.4 直接选择排序的特性总结

2.堆排序 HeapSort

跳转链接:数据结构 之 堆的应用

二、完结撒❀

–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀-正文开始-❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–

一、选择排序

1.直接选择排序

1.1 基本思想

original版(原始版):

每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

optimize版(优化版):

每一次从待排序的数据元素中选出最小和最大的两个元素,分别存放在序列的起始位置和队尾位置,直到全部待排序的数据元素排完。

1.2 实现原理

这里我们讲解optimize版

在元素集合array[0]–array[n-1]中选择值最大和值小的数据元素

若最大值不是这组元素中的最后一个元素,则将它与这组元素中的最后一个元素交换,若最小值不是这组元素中的第一个元素,则将它与这组元素中的第一个元素进行交换

在剩余的array[1]–array[n-2]集合中,重复上述步骤,直到集合剩余1个元素或2个元素

因为我们完成一次循环后就可以将数组开头下标加1,结尾下标减一,所以我们需要记录下标实现交换

这里直接说明,按照上述逻辑执行到数组中剩下两个元素的时候可能会出现BUG,当剩下两个下标对应值不符合逻辑时会相互进行两次交换,但这时只进行一次交换就足够

动态图解:
在这里插入图片描述

1.3 代码实现

void Swap(int* p, int* q)
{int tmp = *p;*p = *q;*q = tmp;
}//选择排序 同时选出最大和最小的两个数据
void SelectSort(int* a, int n)
{int begin = 0;int end = n - 1;while (begin<end){int mini = begin, maxi = begin;//选出最大和最小值for (int i = begin + 1; i <= end; i++){if (a[i] < a[mini]){mini = i;}if (a[i] > a[maxi]){maxi = i;}}Swap(&a[begin], &a[mini]);if (begin == maxi)//!!!{maxi = mini;}Swap(&a[end], &a[maxi]);++begin;--end;}
}

1.4 直接选择排序的特性总结

1. 直接选择排序思考非常好理解,但是效率不是很好。实际中很少使用

2. 时间复杂度:O(N^2)

3. 空间复杂度:O(1)

4. 稳定性:不稳定

2.堆排序

跳转链接:数据结构 之 堆的应用
堆排序我之前博客有讲大家直接跳转学习即可

二、完结撒❀

如果以上内容对你有帮助不妨点赞支持一下,以后还会分享更多编程知识,我们一起进步。
最后我想讲的是,据说点赞的都能找到漂亮女朋友❤
在这里插入图片描述

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

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

相关文章

单片机中的RAM vs ROM

其实&#xff0c;单片机就是个小计算机。大计算机少不了的数据存储系统&#xff0c;单片机一样有&#xff0c;而且往往和CPU集成在一起&#xff0c;显得更加小巧灵活。 直到90年代初&#xff0c;国内容易得到的单片机是8031&#xff1a;不带存储器的芯片&#xff0c;要想工作&a…

FPGA高端项目:解码索尼IMX327 MIPI相机+图像缩放+视频拼接+HDMI输出,提供开发板+工程源码+技术支持

目录 1、前言免责声明 2、相关方案推荐本博主所有FPGA工程项目-->汇总目录我这里已有的 MIPI 编解码方案 3、本 MIPI CSI-RX IP 介绍4、个人 FPGA高端图像处理开发板简介5、详细设计方案设计原理框图IMX327 及其配置MIPI CSI RX图像 ISP 处理自研HLS图像缩放详解Video Mixer…

Django详细教程(二) - 部门用户管理案例

文章目录 前言一、新建项目二、新建app三、设计表结构四、新建数据库五、新建静态文件六、部门管理1.部门展示2.部门添加3.部门删除4.部门编辑 七、模板继承八、用户管理1.辨析三种方法方法一&#xff1a;原始方法方法二&#xff1a;Form组件(简便)方法三&#xff1a;ModelForm…

Python | Leetcode Python题解之第8题字符串转换整数atoi

题目&#xff1a; 题解&#xff1a; INT_MAX 2 ** 31 - 1 INT_MIN -2 ** 31class Automaton:def __init__(self):self.state startself.sign 1self.ans 0self.table {start: [start, signed, in_number, end],signed: [end, end, in_number, end],in_number: [end, end,…

git源码泄露

Git 源码泄露 开发人员会使用 git 进行版本控制&#xff0c;对站点自动部署。但如果配置不当&#xff0c;可能会将 .git 文件夹直接部署到线上环境&#xff0c;这就引起了 git 泄露漏洞&#xff0c;我们可以利用这个漏洞直接获得网页源码。 确定是否存在泄漏 &#xff08;1&…

C++相关概念和易错语法(2)(引用、内联函数、auto类型)

1.引用和指针的关系 引用在语法层面上不开辟新的空间&#xff0c;是对变量或别名取别名&#xff0c;我们对别名进行的任何操作也会同样作用于变量本身&#xff0c;这和形参有本质的区别&#xff0c;它的功能更像是指针。事实上&#xff0c;引用底层的实现就是指针&#xff0c;…

毅力流体设备现已加入2024年第13届生物发酵展

参展企业介绍 温州毅力流体设备有限公司位于浙江温州&#xff0c;这里海、陆、空交通网发达&#xff0c;地理位置优越。是一家经浙江-其他工商机关注册、依法经营的法人机构。 温州毅力流体设备有限公司所生产产品包括交通运输,船舶救生设备,空气呼吸器,等等&#xff0c;所生产…

JavaScript中什么叫深拷贝?

在 JavaScript 中&#xff0c;深拷贝指的是创建一个新的对象&#xff0c;这个新的对象与原始对象完全独立&#xff0c;没有任何共享的属性或者数据&#xff0c;它们不共享同一块内存地址。深拷贝会复制原始对象的所有属性和嵌套对象的所有属性&#xff0c;包括嵌套对象中的属性…

C#,简单,精巧,实用的文件夹时间整理工具FolderTime

点击下载本文软件&#xff08;5积分&#xff09;&#xff1a; https://download.csdn.net/download/beijinghorn/89071073https://download.csdn.net/download/beijinghorn/89071073 百度网盘&#xff08;不需积分&#xff09;&#xff1a; https://pan.baidu.com/s/1FwCsSz…

数字乡村创新之路:科技引领农村实现高质量发展

随着信息技术的快速发展&#xff0c;数字乡村建设已成为推动农村高质量发展的重要引擎。数字乡村通过科技创新&#xff0c;不仅改变了传统农业生产方式&#xff0c;也提升了乡村治理水平&#xff0c;为农民带来了更加便捷的生活。本文将从数字乡村的内涵、科技引领农村高质量发…

HCIP综合实验

各个路由器配置 R1 配置IP [R1-GigabitEthernet0/0/0]ip add 192.168.1.2 24 [R1-Serial4/0/0]ip add 15.1.1.1 24 配置缺省 [R1]ip route-static 0.0.0.0 0 15.1.1.2 接受认证 [R1-Serial4/0/1]ppp pap local-user tao password cipher tao 配置隧道地址 [R1-Tunnel…

微信怎么恢复好友?7个方法助你轻松寻回失联好友

在数字化社交日益盛行的今天&#xff0c;微信作为我们日常生活中不可或缺的沟通工具&#xff0c;承载着与亲朋好友、同事伙伴之间的深厚情谊。然而&#xff0c;有时由于误操作或其他原因&#xff0c;我们可能会不小心删除了某些重要的微信好友&#xff0c;这时&#xff0c;如何…

python file怎么打开

Python open() 方法用于打开一个文件&#xff0c;并返回文件对象&#xff0c;在对文件进行处理过程都需要使用到这个函数&#xff0c;如果该文件无法被打开&#xff0c;会抛出 OSError。 注意&#xff1a;使用 open() 方法一定要保证关闭文件对象&#xff0c;即调用 close() 方…

管理科学笔记

1.线性规划 画出区域&#xff0c;代入点计算最大最小值 2.最小生成树 a.断线法&#xff0c;从大的开始断 b.选择法&#xff0c;从小的开始选 3.匈牙利法 维度数量直线覆盖所有的0 4.一直选最当前路线最短路径 5.线性规划 6.决策论

OSError: Can‘t load tokenizer for ‘bert-base-chinese‘

文章目录 OSError: Cant load tokenizer for bert-base-chinese1.问题描述2.解决办法 OSError: Can’t load tokenizer for ‘bert-base-chinese’ 1.问题描述 使用from_pretrained()函数从预训练的权重中加载模型时报错&#xff1a; OSError: Can’t load tokenizer for ‘…

剑指Offer题目笔记24(集合的组合、排序)

面试题79&#xff1a; 问题&#xff1a; ​ 输入一个不含重复数字的数据集合&#xff0c;找出它的所有子集。 解决方案&#xff1a; ​ 使用回溯法。子集就是从一个集合中选出若干元素。如果集合中包含n个元素&#xff0c;那么生成子集可以分为n步&#xff0c;每一步从集合中…

Python控制浏览器——selenium模块

Python控制浏览器——selenium模块 目录 Python控制浏览器——selenium模块准备工作【1】安装selenium【2】安装浏览器驱动【3】测试驱动&#xff08;作者是Edge&#xff09; 导航和操作窗口导航返回前进刷新最大化窗口切换选项卡 查找和操作元素8种基本By定位方式[1]ID[2]Name…

ndk ffmpeg

报错&#xff1a; 解决办法&#xff1a; 报错 解决办法&#xff1a;

纯CSS实现未读消息显示99+

在大佬那看到这个小技巧&#xff0c;我觉得这个功能点还挺常用&#xff0c;所以给大家分享下具体的实现。当未读消息数小于100的时候显示准确数值&#xff0c;大于99的时候显示99。 1. 实现效果 2. 组件封装 <template><span class"col"><sup :styl…

【代码】C语言|保留小数点后n位并四舍五入,便于处理运算和存储不善的浮点数

前言 有个人跟我说浮点数运算起来非常麻烦&#xff0c;总是算着算着丢失精度&#xff0c;导致计算结果取int的时候取不准。毕竟系统也没有自动根据这个数的精度四舍五入的功能。 比如int(2.999999999999999)2&#xff0c;但是float(2.999999999999999)3.000000。 我觉得这个问…