详解八大排序算法
文章平均质量分 64
对于算法中常见的八大排序算法,例如快速排序等的算法进行整理,归纳,可供读者参考。
去北极避暑~
这个作者很懒,什么都没留下…
展开
-
【八大排序】-- 计数排序(动图演示)
计数排序是一个非基于比较的排序算法。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。当然这是一种牺牲空间换取时间的做法,而且当O(k)>O(nlog(n))的时候其效率反而不如基于比较的排序(基于比较的排序的时间复杂度在理论上的下限是O(nlog(n)), 如归并排序,堆排序)。原创 2023-08-15 21:36:01 · 156 阅读 · 0 评论 -
【八大排序】-- 基数排序(动图演示)
(1)基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用。(2)基数排序法是属于稳定性的排序,基数排序法的是效率高的稳定性排序法。(3)基数排序(Radix Sort)是桶排序的扩展。(4)基数排序是1887年赫尔曼·何乐礼发明的。它是这样实现的:将整数按位数切割成不同的数字,然后按每个位数分别比较。步骤。原创 2023-08-15 20:14:52 · 218 阅读 · 0 评论 -
【八大排序】-- 堆排序(动图演示)
首先堆是一种以顺序结构存储的完全二叉树,本质上还是数组。堆分为大根堆和小根堆大根堆是指每个根节点的值都大于其左右子树的值;小根堆是指每个根节点的值都小于其左右子树的值。已知双亲结点的下标为,则其左右孩子的下标分别为2*i+12*i+2。已知左右孩子的下标,则其双亲结点的下标统一为 (左孩子下标/右孩子下标-1/2堆排序的步骤1.首先将待排序元素建立成大根堆(对应的是升序), 或 小根堆(对应的是降序)。原创 2023-08-15 15:02:21 · 438 阅读 · 0 评论 -
八大排序算法--冒泡排序(动图理解)
以从小到大排序为例,第一轮比较后,所有数中最大的那个数就会浮到最右边;第二轮比较后,所有数中第二大的那个数就会浮到倒数第二个位置……,若交换了数,则改变flag,说明序列还未有序。若在一趟比较完后,flag没变,则说明序列已经有序,就不用再进行循环了。上面代码还有些不足,如果一个序列本来就有序,或者在排序的中间部分就已经排好序。冒泡排序的原理是:从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。//10万个数据测试。为此我们可以改进代码,在每次比较开始前,都加一个。原创 2023-07-31 20:46:58 · 253 阅读 · 0 评论 -
八大排序算法--快速排序(动图理解)
其基本原理是通过选取一个基准元素,将数组划分为两个子数组,分别对子数组进行排序,最终实现整个数组的有序排列。快速排序的时间复杂度最好为O(nlogn),最坏为O(n^2),是一种高效的排序算法。快速排序的基本思想是:选择一个基准元素,将数组划分为两个子数组,一趟排序完后,比基准元素小的元素都在左边,比基准元素大的元素都在右边,然后分别对左右子数组进行排序,最终实现整个数组的有序排列。因为在不断的递归过程中,都一分为二,函数不断被调用,就像二叉树一样,数据越多,二叉树就越来越大。//10万个数据测试。原创 2023-07-31 22:38:34 · 4729 阅读 · 0 评论 -
八大排序算法--选择排序(动图理解)
每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。选择排序的步骤:1>首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。2>再从剩余未排序元素中继续寻找最小(大)元素,然后放到未排序序列的起始位置。3>重复第二步,直到所有元素均排序完毕。原创 2023-07-31 21:32:30 · 1375 阅读 · 0 评论 -
八大排序算法--希尔排序(动图理解)
1.先选定一个小于n的整数gap(一般情况下是将n/2作为gap)作为第一增量,然后将所有距离为gap的元素分为一组,并对每一组进行插入排序。gap越小,数据挪动的越慢,耗时多。2.重复步骤1,直到gap等于1停止,这时整个序列被分到了一组,进行一次直接插入排序,排序完成。gap折半为2,此时相隔距离为2的元素被分到了一组(一共两组,每组五个元素),然后对每一组分别进行插入排序。首先gap取5,此时相隔距离为5的元素分到了一组(一共五组,每组两个元素),然后对每一组分别进行插入排序。//10万个数据测试。原创 2023-07-31 15:53:33 · 1984 阅读 · 24 评论 -
八大排序算法--直接插入排序(动图理解)
直接插入排序是插入排序的一种。把待排序的数字按大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。比如我们玩扑克牌的时候,就用到了此思想。原创 2023-07-31 15:25:29 · 467 阅读 · 6 评论 -
排序--快速排序(附程序流程图)
快速排序是对冒泡排序的一种改进。其核心思想是分治法,分而治之。最优时间复杂度是O(nlogn)。最坏时间复杂度是O(n^2)。原创 2023-05-11 13:43:29 · 3267 阅读 · 23 评论