首页 > 其他分享 >数据结构 (33)选择类排序

数据结构 (33)选择类排序

时间:2024-12-08 23:32:49浏览次数:6  
标签:排序 33 复杂度 元素 堆排序 选择 算法 数据结构

前言

        数据结构中的选择类排序主要包括简单选择排序(也称为选择排序)和堆排序。

一、简单选择排序

  1. 基本思想:简单选择排序是一种直观易懂的排序算法。它的工作原理是,在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后再从剩余未排序元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

  2. 算法步骤

    • 初始化外层循环变量i为0,表示当前要排序的元素索引。
    • 初始化内层循环变量j为i+1,表示从当前元素的下一个元素开始比较。
    • 遍历剩余的元素(由j指示),找到最小的元素并记录其索引min。
    • 使用Swap函数交换当前元素(索引为i)和找到的最小元素(索引为min)的位置。
    • 外层循环继续,直到所有元素都排好序。
  3. 性能分析

    • 时间复杂度:简单选择排序的时间复杂度为O(n^2),其中n是待排序元素的个数。这是因为选择排序的基本操作是通过不断选择最小的元素并进行交换来完成排序,每一轮都需要进行n次比较。
    • 空间复杂度:简单选择排序是一种原地排序算法,只需要一个常量级的额外空间用于存储临时变量,即空间复杂度为O(1)。
    • 稳定性:简单选择排序是一种不稳定的排序算法。不稳定性意味着在排序过程中相等元素的相对位置可能发生变化。
  4. 使用场景:由于其简单性和不占用额外空间的特点,简单选择排序可以在一些特定场景下发挥作用,如小规模数据排序、固定长度数组排序以及简单应用场景中对排序算法的性能要求不高的情况。

二、堆排序

  1. 基本思想:堆排序是利用堆积树(堆)这种数据结构所设计的一种排序算法。它是通过堆来进行选择数据,排升序要建大堆,排降序建小堆。

  2. 算法步骤

    • 构建大顶堆:将待排序序列构造成一个大顶堆,此时整个数组的最大值就是堆结构的顶端。
    • 交换堆顶元素和末尾元素:将堆顶的元素(最大值)与末尾元素交换,并将堆的尺寸缩小1。
    • 调整堆:重新调整堆,使其满足堆的性质。
    • 重复上述步骤,直到堆的尺寸为1,此时数组已经有序。
  3. 性能分析

    • 时间复杂度:堆排序的时间复杂度为O(nlogn),其中n是待排序元素的个数。这是因为堆排序在构建堆和调整堆的过程中,每次都需要进行logn次比较和交换操作。
    • 空间复杂度:堆排序的空间复杂度为O(1),因为它是原地排序算法,不需要额外的辅助数组或链表。
    • 稳定性:堆排序是一种不稳定的排序算法,因为相同元素的相对顺序可能会改变。
  4. 使用场景:堆排序适用于大规模数据的排序,因为它具有较低的时间复杂度。同时,由于它是原地排序算法,不需要额外的辅助空间,因此在空间受限的情况下也具有较高的性能。

 结语   

奢侈是人为的贫穷

知足是天然的财富

!!!

标签:排序,33,复杂度,元素,堆排序,选择,算法,数据结构
From: https://blog.csdn.net/m0_73399576/article/details/144334399

相关文章

  • 数据结构 (34)归并排序
    前言    归并排序(MergeSort)是一种高效、稳定的排序算法,它采用分治法的思想,将待排序的序列分为若干个子序列,然后对这些子序列进行排序,最后再将排好序的子序列合并成一个完整的有序序列。一、基本思想    归并排序的核心思想是分治法,即将大问题分解为小问题......
  • Redis原理—1.Redis数据结构
    大纲1.Redis的数据结构2.Redis的SDS3.Redis的链表4.Redis的字典5.Redis的跳跃表6.Redis的整数集合7.Redis的压缩列表8.Redis的对象9.Redis对象的几个关键属性10.Redis的单线程为什么这么快11.Redis的典型应用场景和说明12.Redis的相关命令说明 1.Redis的数据结构......
  • Redis原理—1.Redis数据结构
    大纲1.Redis的数据结构2.Redis的SDS3.Redis的链表4.Redis的字典5.Redis的跳跃表6.Redis的整数集合7.Redis的压缩列表8.Redis的对象9.Redis对象的几个关键属性10.Redis的单线程为什么这么快11.Redis的典型应用场景和说明12.Redis的相关命令说明1.Redis的数据结构......
  • H5-33 CSS Sprite
    CSSSprite也叫CSS精灵图、CSS雪碧图,是一种网页图片应用处理方式。它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去1、优点:①减少图片字节②减少网页的http请求,从而大大的提高页面的性能2、原理:①通过background-image引入背景图片②通过back......
  • python - pandas排序
    如果进行简单升降序使用以下功能一般就够用importpandasaspd#数据df=pd.DataFrame({'A':['a','c','b','d','a'],'B':[5,4,3,2,1]})#按照B列值进行排序#ascending为True代表升序,False为降序#na_position为First代表空值放在最后,First......
  • 数据结构与算法之美:单链表
            Hello大家好!很高兴我们又见面啦!给生活添点passion,开始今天的编程之路!我的博客:<但凡.我的专栏:《数据结构与算法之美》、《编程之路》、《题海拾贝》欢迎点赞,关注!目录 1、什么是链表2、链表的实现(C语言)2.1节点的初始化2.2节点的打印2.3节点的插入......
  • 每周练手(3)希尔排序和二叉排序树
    前言 大家好呀,这里是正值期末忙得不可开交的猫猫,虽然还有很多实验报告和作业要做,但本周依然少不了固定的每周一练啦,好了,废话少说,我们开始吧。一、二叉排序树题目描述构造一棵二叉排序树,从小到大输出树中所有值大于指定值x的结点值。题目分析构造一棵二叉排序树(也称为......
  • 数据结构与算法——顺序表
    前言本章讲解线性表中最基础的顺序表,觉得有用的话记得点点关注。正文1.线性表线性表(linearlist)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串 ….线性表在逻辑上是线性结构,也就说......
  • 高阶数据结构--B树&&B+树实现原理&&B树模拟实现--Java
    目录一、B-树概念二、B-树插入分析1.用序列{53,139,75,49,145,36,101}构建B树的过程如下:2.插入过程总结三、B树插入实现四、B+树1.B+树概念2.B+树的特性 五、B+树应用1.索引 2.Mysql索引3.InnoDB一、B-树概念1970年,R.Bayer和E.mccreight提出了......
  • 【C++算法】33.位运算_判定字符是否唯一
    文章目录题目链接:题目描述:解法C++算法代码:图解题目链接:面试题01.01.判定字符是否唯一题目描述:解法如果使用数据结构的话哈希表:一个一个字符扫描,不在哈希表里面的就放进去,在里面的就返回false。扫描完全部不重复就返回true。也可以优化一下,字母一共26......