首页
学习
活动
专区
圈层
工具
发布

【数据结构】常见的排序算法 -- 选择排序

一、直接选择排序 选择排序的基本思想: 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。...1.1、算法思想 在元素集合 array [i] - array [n - 1] 中选择关键码最大 (小) 的数据元素 若它不是这组元素中的最后一个 (第一个) 元素,则将它与这组元素中的最后一个(第一个...、算法思想 堆排序的算法思想基于堆这种数据结构(完全二叉树),核心步骤如下: 构建初始堆:将待排序的数组视为一棵完全二叉树,调整其结构为大顶堆(或小顶堆,取决于排序需求)。...适用场景:适用于数据量较大的场景,对空间复杂度要求严格时表现较好,但由于交换和调整操作较频繁,实际应用中对小规模数据的效率可能不如快速排序。...其他特性:基于堆结构实现,排序过程中需要频繁进行堆的调整(下沉操作),逻辑相对直接选择排序更复杂,但效率更高。

20010

数据排序的绝佳选择!Python算法解析:掌握选择排序的娴熟技巧!

数据排序的绝佳选择!Python算法解析:掌握选择排序的娴熟技巧!...选择排序 选择排序是一种简单直观的排序算法,它通过每次选择未排序部分的最小元素,并将其放置在已排序部分的末尾,从而逐步构建有序序列。 算法步骤: 在未排序部分中找到最小的元素。...:", nums) 在这个示例中,我们定义了一个函数selection_sort,它接受一个列表arr作为输入,并对其进行选择排序。...我们使用两个循环来遍历未排序部分和查找最小元素的位置,然后通过交换元素的方式将最小元素放置在已排序部分的末尾。 现在让我们通过可视化展示选择排序算法的执行过程,以加深对算法的理解。...第3次排序: [11, 12, 22, 25, 64] 第4次排序: [11, 12, 22, 25, 64] 排序后的数组: [11, 12, 22, 25, 64] 通过这个可视化示例,你可以看到选择排序算法是如何每次选择最小的元素

45120
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【数据结构】排序——插入排序,选择排序

    前言 本篇博客我们正式开启数据结构中的排序,说到排序,我们能联想到我之前在C语言博客中的冒泡排序,它是排序中的一种,但实现效率太慢,这篇博客我们介绍两种新排序,并好好深入理解排序 个人主页:小张同学...zkf ⏩ 文章专栏:数据结构 若有问题 评论区见 欢迎大家点赞收藏⭐文章 ​ 1.排序 1.1排序的概念 排序 :所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作...内部排序 :数据元素全部放在内存中的排序。 外部排序 :数据元素太多不能同时放在内存中,根据排序过程的要求不断地在内外存之间移动数据的排序。...O(N)为N^2,但相比冒泡效率还是快的 3.选择排序 选择排序其实思路特别简单,通过最前面与最后面的指针进行遍历找到最大的与最小的,将最小的与开头的数交换,最大的与最后面的数交换,再两边指针减减,重复此过程...选择排序的时间复杂度也是O(N^2)但是比效率比冒泡还要低,综上三个排序,插入排序目前最优 结束语 这篇博客先介绍三个排序,与之前的冒泡排序已经有四个,但这些还都是太慢,其中之一的插入排序一定要好好掌握

    41610

    【数据结构】选择排序

    选择排序的基本思想: 每⼀次从待排序的数据元素中选出最⼩(或最⼤)的⼀个元素,存放在序列的起始位置,直到全部待 排序的数据元素排完。...直接选择排序的动图演示 选择排序的思路 准备我们给定一个随机排列的数组arr[],在数组中找好元素对应的下标 在待排序的数组元素中,找出最大(最小)的数据元素; 如果找出来的这个最大(最小)数据元素不是这个数组中的第一个元素...,则与数组中的最后一个元素(第一个元素)进行交换; 交换完之后已排序的元素+1,待排序的元素-1,再从待排序的元素序列中重复,知道集合剩下最后一个元素最小(最大)元素; 大致思路代码: 选择排序总体思路解析...定义最大和最小都在第一个元素,后续遍历找出最大(最小) 遍历完之后找出的maxi和mini分别和end和begin交换 注意:为了避免maxi和begin都在同一个位置。...遍历完之后,mini与begin交换后,maxi反倒成了最小的元素。

    37510

    【海贼王的数据航海】排序——直接选择排序|堆排序

    1 -> 选择排序 1.1 -> 基本思想 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。...1.2 -> 直接选择排序 在元素集合arr[i] -- arr[n - 1]中选择关键码最大(或最小)的数据元素 若它不是这组元素中的最后一个(或第一个)元素,则将它与这组元素中的最后一个(或第一个)...元素交换 在剩余的arr[i] -- arr[n - 2] (arr[i + 1] -- arr[n - 1]) 集合中,重复上述步骤,直到集合剩余1个元素 直接选择排序的特性总结: 好理解,但效率不是很好...堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。...它是通过堆来进行选择数据。需要注意的是排升序要建大堆,排降序建小堆。

    29710

    数据结构|冒泡排序与选择排序

    冒泡排序 排序算法可以说是算法中使用的比较频繁的,冒泡排序是一种简单的排序,它通过遍历,一次比较两个元素,如果排序错误就交换位置,遍历需要重复进行直到不再需要交换,才算排序完成。...冒泡排序的思路如下: 1.比较相邻的元素,如果前一个比后一个大(升序,降序则相反),就交换这两个元素的位置。 2.对每一对相邻元素做同样的工作,从开始第一对到结尾最后一对。...这步做完后,最后的元素会是最大的数。 3.针对所有的元素重复重复以上的步骤,除了最后一个。 4持续每次对越来越少的元素重复上面的操作,直到没有任何一对数字需要比较。...选择排序 时间复杂度:O(n^2),虽然选择排序和冒泡排序的时间复杂度一样,但实际上,选择排序进行的交换操作很少,最多会发生 N - 1次交换。而冒泡排序最坏的情况下要发生N^2 /2交换操作。...选择排序思路 将本次遍历的第一个元素视为最小值,用mixValue记录其下标,遍历一次列表,只要存在比最小值小的数,便将当前下标赋值mixValue。本次遍历结束便交换最小值和遍历起始位的数。

    81020

    【C语言数据结构】排序(选择排序,推排序,冒泡排序)

    今日更新了选择,堆,冒泡排序的内容 欢迎大家关注点赞收藏⭐️留言 选择排序 选择排序 过程图如下: 代码呈现 //时间复杂度:O(N^2) //最好情况下:O(N^2) void SelectSort...这里的选择排序与上图过程略有差异,这里的选择排序每次选出最大和最小值,分别与头和尾交换。然后begin++和end--来缩小选择的范围。...需注意,在同时选最大和最小时,要判断max是否在begin的位置上,如果是,就要把maxi改为mini的值。...交换排序 冒泡排序 //时间复杂度:O(N^2) //最好情况:O(N); void BubbleSort(int* a, int n) { for (int j = 0; j 的值还是false,就说明已经是排序好了的,就可以break掉循环,这时就遍历了一次,时间复杂度就是O(N)。

    42210

    【数据结构初阶】--排序(二):直接选择排序,堆排序

    前言:上篇博客我们学习了直接插入排序和希尔排序,对排序有了一定的理解,之前树与二叉树的博客我们还学习了堆排序,那么今天我们就进入直接选择排序和堆排序的学习中 一、直接选择排序 在元素集合 array[i...]--array[n-1] 中选择关键码最大(小)的数据元素 若它不是这组元素中的最后⼀个(第⼀个)元素,则将它与这组元素中的最后一个(第一个)元素交换 在剩余的 array[i]--array[n-2...,因为它的性能很小 二、堆排序 堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的⼀种排序算法,它是选择排序的一 种,它通过堆来进行选择数据,需要注意的是排升序要建大堆,排降序建小堆...】--排序(一):直接插入排序,希尔排序 【数据结构初阶】--二叉树(四) 【数据结构初阶】--二叉树(五) 【数据结构初阶】--二叉树(六) 总结:本篇博客就到此结束了,主要实现了一下两种选择排序,一个直接选择排序...我们通过对比可知堆排序优于直接选择排序。如果文章对你有帮助的话,欢迎评论,点赞,收藏加关注,感谢大家的支持。

    29210

    MySQL | 如何对查询结果集进行排序

    数据操作语言:结果集排序 如果没有设置,查询语句不会对结果集进行排序。也就是说,如果想让结果集按照某种顺序排列,就必须使用 ORDER BY 子句。 SELECT .........ASC 代表升序(默认),DESC 代表降序 如果排序列是数字类型,数据库就按照数字大小排序,如果是日期类型就按日期大小排序,如果是字符串就按照字符集序号排序。...默认情况下,如果两条数据排序字段内容相同,那么排序会是什么样子?...数据库会先按照首要排序条件排序,如果遇到首要排序内容相同的记录,那么就会启用次要排序条件接着排序。...+ 分页 ORDER BY 子句书写的时候放在 LIMIT 子句的前面 FROM -> SELECT -> ORDER BY -> LIMIT

    11.6K10

    【数据结构初阶】--排序(二)--直接选择排序,堆排序

    一.直接选择排序 在元素集合 array[i]--array[n-1] 中选择关键码最大(小)的数据元素 若它不是这组元素中的最后⼀个(第⼀个)元素,则将它与这组元素中的最后一个(第一个)元素交换...二.堆排序 堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的⼀种排序算法,它是选择排序的一 种,它通过堆来进行选择数据,需要注意的是排升序要建大堆,排降序建小堆。...三.直接选择排序和堆排序的性能对比 --我们还是通过测试来对比一下这两种排序的性能,大家也可以看看和之前实现过的排序的对比 代码演示: #include"Sort.h" void PrintArr(...往期回顾: 【数据结构初阶】--二叉树(四) 【数据结构初阶】--二叉树(五) 【数据结构初阶】--二叉树(六) 【数据结构初阶】--排序(一):直接插入排序,希尔排序 结语:本篇博客就到此结束了,...如果文章对你有帮助的话,欢迎评论,点赞,收藏加关注,感谢大家的支持。

    24910

    mysql数据类型的选择

    1、整数和浮点数 如果不需要小数部分,就是用整数来保存数据;如果需要小数部分,就是用浮点数。对于浮点数据列,存入的数值会对该列定义的小数位进行四舍五入。...2、浮点数和定点数 浮点数FLOAT、DOUBLE相对于定点数DECIMAL的优势是:在长度一定的条件下,浮点数能表示更大的数据范围。...但是由于浮点数容易产生误差,因此对精确度的要求比较高时,建议使用DECIMAL存储。另外,两个浮点数进行减法和比较运算时容易出问题,因此在进行计算的时候一定要小心。...5、ENUM与SET ENUM只能取单个值,它的数据列表是一个枚举集合。它的合法列表最多有65535个成员。...ENUM和SET的值是以字符串的形式出现的,但是在MYSQL内部以数值的形式存储它们。 6、BLOB和TEXT BLOB是二进制字符串,TEXT是非二进制字符串,两者均可存放大容量的信息。

    1.8K20

    python中对列表元素大小排序(冒泡排序法,选择排序法和插入排序法)—排序算法

    前言 排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列。...本文主要讲述python中经常用的三种排序算法,选择排序法,冒泡排序法和插入排序法及其区别。通过对列表里的元素大小排序进行阐述。...一、选择排序法 选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。 1....插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。...插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 插入排序和冒泡排序一样,也有一种优化算法,叫做拆半插入。 1.

    2.9K30

    数据结构初阶:排序算法(一)插入排序、选择排序

    2.2.3 希尔排序的特性 1、希尔排序是对直接插入排序的优化; 2、当gap > 1时都是预排序,目的是让数组更接近于有序。当gap == 1时,数组已经接近有序的 了,这样就会很快。...三、选择排序 3.1 直接选择排序 3.1.1 直接选择排序的思想 每次从待排序的数据中选择一个最小(最大)的元素放在序列起始位置,直到整个序列元素排序完毕 3.1.2 代码实现 如果maxi==begin...直接选择排序的特性总结: 1、直接选择排序思考虽然非常好理解,但是因为效率不是很好。...O(n) 既然我们通过了向下调整建堆的方法,将数组建成了一个堆的形式,那我们该如何对堆中的数据进行排序呢?...步骤如下: 1、将堆顶数据和堆尾数据互换,堆尾数据出堆,然后对堆顶进行一次堆的向下调整(使其还是一个大堆),调整时被交换到最后的那个最大的数不参与向下调整(已经出堆)。

    41310

    掌握常见的几种排序-选择排序

    选择排序是一种简单的排序,时间复杂度是O(n^2),在未排序的数组中找到最小的那个数字,然后将其放到起始位置,从剩下未排序的数据中继续寻找最小的元素,将其放到已排序的末尾,以此类推,直到所有元素排序结束为止...我们先看下选择排序的一段代码 function selectSort(arr) { const len = arr.length; var minIndex, temp; for (let...arr[minIndex] = temp; } return arr; } selectSort([6,12,80,91,8,0]); 我们画个图还原排序所有过程,具体如下 从每次循环中我们可以知道选择排序...再言简意赅点,选择排序就是 1、假设第一个元素是最小值 2、从剩余元素中选择与第一个元素比较元素大小,确认最小索引值,然后交换位置 3、从剩余位置依次循环,假设剩余位置为最小值,然后从剩余元素中选择与之进行比较...,然后确认是否交换位置 4、直到循环到最后一个索引为止 总结 1、选择排序时间复杂度是O(n^2) 2、假设首个元素是最小的元素,在剩余未排序的元素中与之进行比较,如果比它小,就确认最小位置索引,与之交换位置

    47820

    数据结构算法--2 冒泡排序,选择排序,插入排序

    基础排序算法         冒泡排序 思想就是将相邻元素两两比较,当一个元素大于右侧相邻元素时,交换他们的位置,小于右侧元素时,位置不变,最终序列中的最大元素,像气泡一样,到了最右侧。...这时冒泡排序第一轮结束,数列最右侧元素9的位置可认为是一个有序区,有序区目前有一个元素. 第二轮排序结束后,数列右侧的有序区有了两个元素.  ...if not exchange: return         选择排序 基础思想为将列表中最小元素依次遍历筛选出来,最终得到一个有序列表 def select_sort_simple...def insert_sort(li): for i in range(1,len(li)): # 功n-1趟,i表示摸到牌的下标 tmp=li[i] # 每次摸的牌...j-=1 li[j+1]=tmp # 选好位置了 可以看出插入排序时间复杂度为O(n*n)

    35510

    数据结构算法--1 冒泡排序,选择排序,插入排序

    基础排序算法 冒泡排序 思想就是将相邻元素两两比较,当一个元素大于右侧相邻元素时,交换他们的位置,小于右侧元素时,位置不变,最终序列中的最大元素,像气泡一样,到了最右侧。...这时冒泡排序第一轮结束,数列最右侧元素9的位置可认为是一个有序区,有序区目前有一个元素. 第二轮排序结束后,数列右侧的有序区有了两个元素....if not exchange: return 选择排序 基础思想为将列表中最小元素依次遍历筛选出来,最终得到一个有序列表 def select_sort_simple...def insert_sort(li): for i in range(1,len(li)): # 功n-1趟,i表示摸到牌的下标 tmp=li[i] # 每次摸的牌...j-=1 li[j+1]=tmp # 选好位置了 可以看出插入排序时间复杂度为O(n*n) 数据结构算法--1 顺序查找二分查找-CSDN博客二分查找和顺序查找等简单查找

    29410

    python中选择排序法对数组进行升序排序_sort函数对字符串数组排序

    这三个排序方法应对日常工作基本够用 先说一下三者的区别 sort, sorted 是用在 list 数据类型中的排序方法 argsort 是用在 numpy 数据类型中的排序方法( numpy 里也有一个...,而是将排序的结果作为参数传递给一个新的数组,而 sort 则在原数组上直接进行了排序 区别就是 sorted 需要一个变量接收排序结果,sort不用 建议使用 sorted,因为 sort 虽然代码更简洁...1.升序排序 2.降序排序 3.如果不想要排序后的值,想要排序后的索引,可以这样做 4.字符串类型排序 5.二维数组排序 6.二维数组获取排序后的索引 7.字典数组排序 8.字典数组获取排序后的索引...9.对象排序 10.对象排序获取排序后的索引 11.一维数组排序【numpy】 12.一维数组获取排序后的索引【numpy】 13.一维数组降序排序【numpy】 14.二维数组排序【numpy】 15...', '9787501319343', 2013), ('人的解放', '9787215064003', 2014)] 10.对象排序获取排序后的索引 book_list = [ Book('北大马克思主义研究

    00

    数据结构:选择类型排序的总结(考研)

    选择排序包括:选择排序,双选择排序以及堆排序。 选择排序的核心是每一趟排序中查找最小值或者最大值的索引,然后与边界的位置进行交换。...下面看一下常见的选择类型的排序。...= minIndex) swap(a[i], a[minIndex]); } } (2)双选择排序 双选择排序本质上还是选择排序,可以说只是对直接选择排序做了优化。...双选择排序每趟循环中同时找到最大值和最小值的索引,最大值和最小值初始的索引为待排序数组的两个边界,当一趟查找结束后,如果有索引发生了变化,就进行交换。...堆排序在底层中使用了堆这样的数据结构,堆维护的性质是,若为大根堆,则任意根节点的值大于其左右孩子节点的值。

    60810

    数据结构与算法——选择排序

    引言 本篇介绍选择排序,如果你需要了解其他排序算法,请点击下面链接查看!!!...了解更多:数据结构与算法目录整理 选择排序 一、选择排序的概念 选择排序(Selection sort)是一种简单直观的排序算法。...它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。...以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。 二、算法步骤 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。...再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。 重复第二步,直到所有元素均排序完毕。 三、动图演示 ?

    65120
    领券