排列组合c和a怎么计算(快速排序的详细过程)

上一章节已经详细的向大家介绍过排序的相关概念学习笔记-排序简单介绍,本文旨在为大家详细的介绍快速排序。

快速排序

快速排序(Quicksort)是对冒泡排序(学习笔记-详解冒泡排序)的一种改进,也是一种交换类排序。

快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以进行,以此达到整个数据变成有序。

学习笔记-详解快速排序

算法原理

本质是分而治之思想的运用。首先选取一个元素作为分界值,将大于该分界值的元素放在数组的右边,小于主元的元素放在数组的左边,等于分界值的元素位置不变,然后不断迭代上述规则完成排序。

快速排序算法的原理如下:

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

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

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

4,重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。

学习笔记-详解快速排序

算法实现#include <stdio.h> #define elemType int /*元素类型*/int k=1;//轮次记录 void Print (elemType *arr, int len){ int i; for (i=0; i<len; i++){ printf (“%d\t”, arr[i]); } printf(“\n”);}void Sort(elemType *a, int left, int right){ if(left >= right) /*如果左边索引大于或者等于右边的索引就代表已经整理完成一个组了*/ { return ; } int i = left; int j = right; int key = a[left]; printf(“第%d轮选取的key值为:%d\n”,k,key); while(i < j) /*控制在当组内寻找一遍*/ { while(i < j && key <= a[j]) /*而寻找结束的条件就是,1,找到一个小于或者大于key的数(大于或小于取决于你想升 序还是降序)2,没有符合条件1的,并且i与j的大小没有反转*/ { j–;/*向前寻找*/ } a[i] = a[j]; /*找到一个这样的数后就把它赋给前面的被拿走的i的值(如果第一次循环且key是 a[left],那么就是给key)*/ while(i < j && key >= a[i]) /*这是i在当组内向前寻找,同上,不过注意与key的大小关系停止循环和上面相反, 因为排序思想是把数往两边扔,所以左右两边的数大小与key的关系相反*/ { i++; } a[j] = a[i]; } a[i] = key; /*当在当组内找完一遍以后就把中间数key回归*/ printf(“第%d轮排序后结果如下:\n”,k); Print(a, 9); k=k+1; Sort(a, left, i – 1); /*最后用同样的方式对分出来的左边的小组进行同上的做法*/ Sort(a, i + 1, right); /*用同样的方式对分出来的右边的小组进行同上的做法*/ /*当然最后可能会出现很多分左右,直到每一组的i = j 为止*/} int main() { int i; elemType arr[9] = {94,19,29,9,11,1,14,13,29}; printf(“待排序的序列为:\n”); Print(arr, 9); printf(“\n\n”); Sort (&arr,0,8); printf(“\n\n”); printf(“排好序的结果如下:\n”); Print(arr, 9); }
学习笔记-详解快速排序

序列红框为界

算法分析
学习笔记-详解快速排序

时间复杂度

快速排序的一次划分算法从两头交替搜索,直到left和right重合,因此其时间复杂度是O(n);而整个快速排序算法的时间复杂度与划分的趟数有关。

最优情况:每次划分所选择的中间数恰好将当前序列几乎等分,经过log2n趟划分,便可得到长度为1的子表。这样,整个算法的时间复杂度为O(nlog2n)。

最坏情况:每次所选的中间数是当前序列中的最大或最小元素,这使得每次划分所得的子表中一个为空表,另一子表的长度为原表的长度-1。这样,长度为n的数据表的快速排序需要经过n趟划分,使得整个排序算法的时间复杂度为O(n2)。

为改善最坏情况下的时间性能,可采用其他方法选取中间数。通常采用“三者值取中”方法,即比较H->r[left].key、H->r[right].key与H->r[(left + right)/2].key,取三者中关键字为中值的元素为中间数。

可以证明,快速排序的平均时间复杂度也是O(nlog2n)。因此,该排序方法被认为是目前最好的一种内部排序方法。

空间复杂度

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

算法稳定性

值得注意的是,快速排序是一种不稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。

 

本文来自投稿,不代表展天博客立场,如若转载,请注明出处:https://www.me900.com/267451.html

(0)

相关推荐

  • 电商客服外包现在都多少钱?客服外包公司的收费方式

    随着互联网的发展,电商这个行业也是迅速发展起来,随着网店对客服人才的需求,市场上滋生了一个新兴的公司,电商客服外包公司,相信很多店主对这个公司也是有所了解的,合作正规的外包客服已经成为一种趋势,接下来店主们关心的问题就是这个公司的客服是怎么收费的。 萌萌客客服外包商就和大家一起来了解一下客服外包公司的收费方式。 客服外包收费 1.底薪加提成 首先要说的就是底…

    2023-02-07
  • 泰拉瑞亚套装排行,泰拉瑞亚手游必合武器推荐

    泰拉瑞亚手游必合武器推荐,还有套装。泰拉瑞亚虽然有丰富的武器道具和套装等等,但是还是有一些装备是非常推荐的,虽然玩家们可以按照自己的喜好去任意搭配武器和道具等等,但是假如在冒险的过程中遇到了一些挫折,比方说卡boss(怎么样也打不过某个boss),或者说在某个地图里推进得非常困难,不妨来看一下主流的装备套装攻略吧。 而它的掉落在是由火星人入侵事件触发的,玩家…

    2023-02-13 知识百科
  • 网络如何赚钱(网络有什么挣钱的门路)

    现在是互联网的时代,所以有很多朋友想要自主创业,可能会优先考虑选择互联网的一些项目,但是在选择项目的时候,有一些朋友确实很烦恼,所以想要求助大家知不知道网上怎么赚钱快? 1、拍视频 小视频今年的形式不错,得到了各个平台的大力扶持,一部手机,就可以实现拍摄。拍摄的成品,可以发布到不同的平台,那么平台也会给以一定的奖励。你的拍摄得到的关注度越高,那么平台都会有相…

    2022-01-27
  • 卓越亚马逊网上书店(卓越亚马逊网上书店下载)

    作者 | 藏嘉书店 来源 | 孔夫子旧书网App动态 在本世纪初,我熟知的并存着四家网络书店:席殊书屋、当当网、卓越网和孔夫子。席殊书屋在我的读书生涯中是功不可没的,其连锁店遍及了各中小城市,对我等读者无疑是福音,我直接充值600元购买了最高级别的“资深会员”。席殊书屋与资本的纠葛由来已久,版权问题成了压垮席殊书屋的最后一根稻草。席殊返回老家江西南昌闭门思过…

    2023-03-30
  • 天猫付完尾款退货定金退吗(淘宝付尾款后退定金吗)

    双十一在淘宝付定金之后不想要可以申请退款吗?用户在双十一剁手行为已经开始,对于这波付定金的行动,很多人都想要知道如果不想要已经付了定金的东西能不能退款,这个问题游综宅小编接下来就来和大家分析分析。   淘宝付了定金不想要了可以退款吗 可以的退款,通常来说是定金是不会退回的,有些店家都会在预售物品详情说明页备注定金不退,但是用户可以先支付尾款,之后再…

    2021-12-06
  • 如何获得比特币(比特币最初怎么获得)

    BTC是什么 中本聪发布的BTC白皮书上说BTC:1种点到点的电子现金系统软件( Bitcoin:APeer-to-PeerElectronicCashSystem)。BTC的推出不依赖中心化的金融机构,是根据每一个加入比特币挖矿所取得的区块奖赏而形成。 BTC的总产量被限制在2100万枚,具备通缩性和稀缺性,又被称作数字黄金,它在支付款、金融业、投资等各个…

    2021-12-08
  • 石墨烯上市公司(中国十大石墨烯企业)

    某种材料的出现,推动了人类文明发展迈入新台阶的,都可以称得上是“历史级别”的材料。 那么人类史上出现过几种历史级的材料?   木材可以说是第一代“历史级”材料 木材出现于石器时代之前。从数百万年前的非洲一直延续到现在。人类从原始时代到基础物质世界的跨越,可以说是建立在木材,竹子等相关材料上的。 到了近代,“石油”是开启工业革命的钥匙 石油一经发现便…

    2021-12-06
  • 一直播主播提成多少(一直播平台提成比例)

    最近忙着给产品找宣传途径,最终问过领导那边,确定了两种方式来给产品进行宣传。 产品宣传的最终目的是为了增加产品的销量,相对于线下的地推、促销活动以及铺货等方式,线上销售做得好更容易做出销量的指数型上涨,所以经过我跟同事们的深层次讨论,首先确定了这个方式: 即和短视频平台合作先搭建相关产品营销话题,然后再投入一定的费用进行所谓“话题挑战赛”来充实话题下的内容,…

    2021-12-09
  • 哈尔滨酒店火灾,哈尔滨酒店火灾事件历史发展情况

    海**2月1日电据黑龙江省应急管理厅官方网站消息,关于哈尔滨北龙汤泉休闲酒店有限公司“8·25”重大火灾事故结案的通知 (黑应急发〔2019〕12号 )如下 哈尔滨市人民政府: 2018年8月25日4时12分,位于哈尔滨市松北区的哈尔滨北龙汤泉休闲酒店有限公司(以下简称北龙汤泉酒店)发生重大火灾事故,造成20人死亡、23人受伤,过火面积约400平方米,直接经…

    2023-04-25
  • 看相算命视频(看相算命入门书籍)

    1.孩子学习什么都会收到环境的影响,作为家长,我们要言传身教。所以我决定在孩子暑假的这两个月,我们每人各带一个月,分别将自己拿手的东西交给儿子。两个月过去了。儿子跟着妈妈学会了打麻将,跟着爸爸学会了吐烟圈。虎父无犬子啊! 2.老夫妻正在为儿子的未来焦虑。老公叹了一口气道:“这孩子不是读书的料,我看还是送他去技术学校,学习开车比较好,将来当不了公交司机,还可以…

    2023-05-24 知识百科
  • 派出所行政处罚影响三代(行政拘留会不会影响子女政审)

    2023年全国两会前夕,全国政协委员周世虹建议,取消对罪犯子女考公的限制,废除有关直系亲属、旁系亲属等有过被刑事处罚等处分而影响考生或被政审人政审的规定。 周世虹委员终于把之前民间传得沸沸扬扬,但一直没有明确宣示规则的“一人犯罪,影响三代”的问题,摆放在了全国两会这个国家议事平台之上。目前我国参军、公考、军队文职、考编的政审,受这个规则影响到很多人。 拿军队…

    2023-05-24
  • 桃花源记很污的解释(桃花源记很污的解释句子)

    凡是读过初中的莘莘学子都学过这千古名篇,老师要求同学背诵,故都记忆犹新。当破解了桃花源千古未解之谜后,才知教材中的理解和分析都是浮光掠影的,不知潜入文内探究其蕴含的深意,从而不明真相,以致作出了不符文章客观实际的曲解。老师和编教材的都没错,实在是此千古隐文谜文潜伏很深、幽蔽极严、隐藏至密、谜底难破,导致无人能解。 因有文献和遗址双重验证,足以证明桃花源就在衡…

    2023-04-02