排列组合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)

相关推荐

  • 海思麒麟985相当于骁龙多少?海思麒麟985和990有什么区别

    目前已经来到了11月7日,一年一度的双十一活动也即将达到最高潮,各大厂商也早早的放出了针对双十一活动的相关产品,而与这个热闹现象显得格格不入的就是华为了,这段时间华为明显地进入到了蛰伏阶段,针对双十一活动也仅仅是推出了一款低端产品,依然最高支持4G服务。在我个人看来,未来的很长时间里,市面将会缺少5G麒麟新品加入,但是最近一款麒麟产品突然上市,让手机市场又掀…

    2023-02-09
  • 美团总部投诉电话(投诉美团平台打哪个电话)

    半岛全媒体记者 王媛 当前青岛市疫情防控形势严峻复杂,正处于疫情处置的关键时点。网络购物正在成为老百姓的重要消费手段。为切实保障好群众基本生活需求,11月7日,青岛市市场监督管理局,按照服务型执法的要求,联合多多买菜、饿了么、盒马鲜生、京东、利群网商、美团、淘菜菜等7家电商平台,共同发起“携手抗击疫情,网络诚信经营倡议书”。 内容如下: 一、诚信公平竞争。恪…

    知识百科 2023-04-10
  • 流量用的多用什么套餐划算

    我有一张用了8年多的移动卡,绑定了各种信息。这张卡难以断舍离,所以换成8元保号套餐,但没流量。 我还有一张用了3年多的19元的联通大王卡,这张卡没啥通用流量,只是有腾讯定向流量,方便打游戏! 这样两张卡的套餐组合起来,一看就很划算。我应该没什么烦恼吧! 直到上个月,我的话费突然上涨到100多块钱!我的烦恼就来了[泪奔] 问题出在哪里呢,明明套餐已经比较划算了…

    2023-05-24 知识百科
  • 沈阳私立高中哪个好?沈阳排名靠前的公立与私立初中

    说起沈阳的学校,从小学到高中,数量相当多。但是总有一些名校,只要你亮出名号!气场就摆在那里!今天就来总结一下沈阳排名靠前的公立与私立初中!七中沈阳市第七中学建立于1907年,是一所享誉盛名的初中。主校区位于沈阳市沈河区奉天街和热闹路的交汇处,简称“沈阳七中”。2006年9月,在教育均衡化发展的新形势下,学校办学体制由民办公助转为公办学校,按学区招生,就近入学…

    2023-02-07 知识百科
  • 疯果盒子,买疯果盒子:最好的礼物选择

    转眼间, 第一批90后即将跨入30岁的大门。 尽管刚刚三十而立, 但有人已经开始立遗嘱了! 今天90后女生立遗嘱将房产留给闺蜜。 登上了微博热搜! 这个90后就是上海女孩王俞(化名), 近日,她到中华遗嘱库上海登记中心, 她在遗嘱写道: 自己去世后, 将一套房产留给最信任的朋友。 究竟为何早早立下遗嘱? 房子又为何留下给朋友? 听完理由, 或许你也能理解。 …

    知识百科 2023-05-09
  • 门店活动方案策划(门店活动方案策划模板)

    90%以上的服装实体店老板最头大的问题是没有客人或客人少,做活动吸引客人进店,是最为迫切的需求。 其实,做服装要把握的一个重要的指标就是产品的动销,销量=人流量×进店率×转化率×客单价,同样是让利和打折,但却很讲究营销技巧,今天小编就和大家分享7个实体服装店常用且实用的活动促销方案。   一、朋友圈促销 创新的朋友圈活动促销可以帮助店铺快速打响知名…

    2021-12-09 知识百科
  • 从探索到成功,为什么马布里在中国能成功

    外援对于CBA球队的意义自然是不言而喻的,如今的CBA球队想要拥有竞争力就必须要引进足够有能力的外援。而在CBA历史上所谓的外援里,马布里在中国无疑是最名利双收的一个,那么大家有没有想过马布里为什么会在中国取得成功呢? 事实上马布里在CBA并非没有“污点”,他生涯里最大的争议自然是他在比赛中上腿的动作,很多网友甚至直接称呼他为“马上腿”。诚然,马布里的一些动…

    2023-06-05 知识百科
  • 独一无二特别的微信号设置(改个有意义的微信号id)

    微信现在支持修改微信号,这是一个好消息,为那些乱改微信的人,找到福音。然而,很多人都不知道如何做一个简单易记的微信号,本文将与大家分享如何改变微信号,简单易记的微信号设置技巧! 技巧1:有意义 根据微信号“以字母开头,6~20位数字,字母和下划线”的组成要求,我们可以在这个范围内用26个英文字母和9位数字组成一个唯一的微信号。根据微信号的要求,我们可以设置微…

    知识百科 2021-12-06
  • 无基础开花店运营方案 如何制定有效的开花店运营方案

    说的营销,我们要知道,营销是为了做什么。其实无外乎两点,1是宣传,2是销售。网上充斥的各种零零散散的方案,要么是标题夸张的水货,要么是不成体系的散货,今天我们就为大家带来这一篇史上最全花店营销集合,你要是全都学会了,包你的花店提升一个档次,销售额上一个台阶,新花店看了,让你少吃5年亏,老花店看了,让你茅塞顿开,大梦初醒。 花店营销的基础 – 计划…

    知识百科 2023-06-02
  • 搜索引擎网站有哪些(五个常用的搜索引擎网站名及网址)

    今天一起来了解下一些常见的搜索引擎。目前国内主流的5大搜索引擎有百度、谷歌、360、神马及搜狗搜索。 1.用户通过百度搜索引擎可以搜到世界上zui新zui全的中文信息,它拥有全球zui大的中文网页库。同时,百度在中国各地分布的服务器能直接从zui近的服务器上把所搜索的信息返回给当地用户,使用户享受快速的搜索传输速度。百度目前提供网页搜索、音乐搜索、图片搜索、…

    2021-12-11 知识百科
  • 如何从网站上爬数据(网页数据采集软件)

    市面上很多采集软件,挂着免费的名义推广软件,实际靠提供一些增值服务,来收取费用。 软件收费合理,是为了支持开发者提供更好的服务。选软件一定要挑选适合自己软件,性价比高的软件来用,接下来讲讲软件的价格和功能的比较。 数据采集软件有老树数据采集软件,后裔数据采集,爬山虎,八爪鱼,集搜客,火车头,网络矿工,前嗅,神采,神箭手,发源地,梦蝶。   1.性价…

    2021-12-11
  • 李梅原型真实姓名照片(李丽李梅原型照片)

    在第二次世界大战中,**陆军航空队对日本首都东京进行的一系列大规模的战略轰炸,使得东京被炸成了月球表面。这也是人类历史上最具破坏性的一次空袭,造成的伤亡人数比后来投放在广岛长崎的**杀伤还要多,而东京也变为了一片火海废墟。 从纸片轰炸到早期轰炸 早在1938年的5月,中国国民政府的空军就曾出动过两架轰炸机向日本的长崎和福冈两个地区投放过超过一百万份传单,上面…

    2023-05-28 知识百科