定制加工
JavaScript算法——快速排序
2025-01-03 04:18

快速排序算法由 C. A. R. Hoare 在 1960 年提出。它的时间复杂度也是 O(nlogn),但它在时间复杂度为 O(nlogn) 级的几种排序算法中,大多数情况下效率更高,所以快速排序的应用非常广泛。
注意 快速排序不一定是最快的排序方法,这取决于需要排序的数据结构、数据量。不过,大多数情况下,面试官和工作场所用它的概率也是相对较高的,所以我们应该花时间把它学透彻。

  1. 首先设定一个分界值,通过该分界值将数组分成左右两部分。

  2. 将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值。

  3. 然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。

a. 复杂度
快速排序的方法复杂度有时间复杂度和空间复杂度。
时间复杂度往往是决定一个算法优劣的最重要出发点,空间复杂度在当今的计算机上已经没有那么大的影响力了。
快速排序的一次划分算法从两头交替搜索,直到low和high重合,因此其时间 复杂度是O(n) ; 而整个快速排序算法的时间复杂度与划分的趟数有关。
理想的情况:每次划分所选择的中间数恰好将当前序列儿平等分,经过log2n趟划分,便可得到长度为1的子表。这样,整个算法的时间复杂度为O(nlog2n)。
最坏的情况:每次所选的中间数是当前序列中的最大或最小元素,这使得每次划分所得的子表中一个为空表,另一子表的长度为原表的长度-1。这样,长度为n的数据表的快速排序需要经过n趟划分,使得整个排序算法的时间复杂度为O(n2)。
如果需要优化,那么我们希望每次区分的时候都取到中间数。为改善最坏情况下的时间性能,可采用其他方法选取中间数。通常采用“三者值取中”方法,即比较H->r[low].key、H->r[high].key与H->r[(10w+high)/2].key,取三者中关键字为中值的元素为中间数。

空间复杂度在快速排序中平均也是O(log2n))。
从空间性能上看,尽管快速排序只需要一个元素的辅助空间,但快速排序需要一个栈空间来实现递归。最好的情况下,即快速排序的每一趟排序都将元素序列均匀地分割成长度相近的两个子表,所需栈的最大深度为log(n+1);但最坏的情况下,栈的最大深度为n。这样,快速排序的空间复杂度为O(log2n))。

b. 稳定性
不稳定性的含义:不稳定性是指在原始序列中相等的如果元素按照a1 a2 a3…的顺序排列时,排序之后相等元素的原相对位置改变,比如a3跑到a1前面去了。
举个例子就知道了。假定初始序列为
[49,27,65,97,30,27*,49*]
运用快速排序算法,得到的有序序列为
[27*,27,30,49,49*,65,97]

我们先编写一下操作的主要部分,就是选出一个基准,这个基准的左边的数值比基准值小,而右边的值比基准值大或者相等。因为它操作次数需要重复,一般来说,我们可以用递归方式。不过,也可以写成一般循环方式,但是不建议这么写。
编写为数组分区的代码 partition()

 

代码以最后一个元素为基准,用变量 pivotIndex 来跟踪“中间”位置,这个位置左侧的所有元素都比 pivotValue 小,而右侧的元素都比 pivotValue 大。

最后一步把基准(最后一个元素)与 pivotIndex 交换。

递归实现

 

在这个函数中首先对数组进行分区,之后对左右两个子数组进行分区。只要这个函数收到一个不为空或有多个元素的数组,则将重复该过程。下面写一个数组验证一下

 

输出

 

循环实现

 

来一个测试数组

 

输出

    以上就是本篇文章【JavaScript算法——快速排序】的全部内容了,欢迎阅览 ! 文章地址:http://ww.kub2b.com/news/19548.html
     栏目首页      相关文章      动态      同类文章      热门文章      网站地图      返回首页 企库往资讯移动站 http://ww.kub2b.com/mobile/ , 查看更多   
最新文章
光威复材2024年下降逾15%,连续两年发生下滑
3月31日晚,(300699.SZ)发布2024年财报,实现营收24.5亿元,同比下降2.69%;归母净利润7.41亿元,同比下降15.12%;扣非净利润6.6
看完超人气游戏改编的《我的世界大电影》,我整个人都方了
观影《我的世界大电影》,感觉自己真的方了。毕竟,已经领略过风靡全球的沙盒游戏《我的世界》中那方块的世界,还有游戏带给人的
手机大脑手机阅读「手机大脑」
为什么只要醒着我们就离不开手机,为什么疫情中的我们更容易自投罗网?为什么比尔·盖茨不让小孩用手机,乔布斯不让孩子碰iPad?
远洋集团(03377):拟3.22亿元出售北京盛永置业投资23%股权
智通财经APP讯,远洋集团(03377)发布公告,于2025年4月11日,卖方(公司全资附属公司北京银港房地产开发有限公司)拟向买方(日照钢
600375,停牌,退市风险解除!
*ST汉马(600375)即将去星摘帽。4月16日晚间,该公司公告,公司股票将于2025年4月17日(星期四)开市起停牌一天,并于2025年4月
300万像素手写滑盖三星G618行货大跌530三星滑盖手机「300万像素手写滑盖三星G618行货大跌530」
  【7月15日太平洋电脑网上海站】今天,三星奥运手机G618行货从2288元跌至新低1758元。530元的降幅对于这款三星众多奥运手机中
最新手机续航TOP10排行榜:小米14垫底,Mate60和iPhone15落榜,第一名让人很意外手机续航排行「最新手机续航TOP10排行榜:小米14垫底,Mate60和iPhone15落榜,第一名让人
随着科技的进步,手机已经成为了我们生活中不可或缺的一部分。而手机续航能力也成为用户选择新机的重要考量因素之一。特别是对于
“好房子”新规激发楼市活力 北京3月新旧房成交量齐增
每经记者:陈梦妤    每经编辑:魏文艺“今年第一季度,我们所有项目均超额完成销售任务,完成率均达100%以上。这一成绩主要
智能手机:重塑现代人生活方式的双刃剑现代手机「智能手机:重塑现代人生活方式的双刃剑」
随着科技的飞速发展,智能手机已经成为现代人生活中不可或缺的一部分。它为我们带来了便捷的信息获取、高效的社交方式以及
10块钱的VR跟7000元的到底有啥区别?部手机「10块钱的VR跟7000元的到底有啥区别?」
步入VR元年,VR的关注度甚至乎呈直线上升,但是还有很多VR小白根本不知道VR为何物。VR频道特设《小白玩VR》系列文章,没看过的,