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

相关推荐

  • 7天连锁酒店预订,7天连锁酒店预订在线服务

    不难想像,出游的反弹期快来了,不仅是国内,出国游也不是梦! 即将到来的五一、端午,甚至暑假都会是出行旅游高峰,据小编从一些合作酒店的销售了解到,目前五一假期已经有些酒店满房,全部被预订完了,今天来聊一聊预订酒店这事儿… 再比如,曼谷柏悦酒店,拿最近3月份的日期来看 某OTA上,曼谷柏悦酒店豪华客房带双早,3晚合计要12238元。 在51荟旅游小程…

    知识百科 2023-04-23
  • vivo手机一开屏就弹出广告

    今天小编要和大家分享的是vivoS7怎么关闭系统广告,系统广告怎么关闭,具体步骤是什么,一起来看看吧 负一屏的新闻资讯,点击上方的设置,点击热点资讯进去关闭即可 全局搜索繁多的内容,只需要点击下方的设置,点击“首页展示内容”,将它们都关闭 关闭全局搜素,在使用桌面的时候经常误触不小心进入了全局搜索,给自己带来了很大的不便,打开设置-桌面、锁屏与壁纸-桌面设置…

    知识百科 2023-04-24
  • 企业内部网,企业内部网络安全指南

    前言 本期我们将分享一些2023年网络安全学习的一些建议,主要分为技术、职业两个方面。 技术方面我们要尽可能打好基础,阅读一些网络安全新闻、学习IT基础知识(如硬件、软件、操作系统等)、深入研究网络(如TCP/IP模型、网络协议等)、掌握编程和脚本(可以学习一门自己感兴趣的编程语言,自动化一些繁琐的步骤)、 学习Windows/Linux操作系统基础知识、了…

    知识百科 2023-05-14
  • 达人秀 卓君 你最近在达人秀上有什么新作品

    不知不觉间,《中国达人秀》这档经典的节目已经过去了12年的时间,虽说现在已经完结,但每每提及,还是会有很多人记得他们的精彩演绎,尤其是前两届的冠军,断臂钢琴师刘伟、田埂上的梦卓君。 10多年过去了,现在的两人到底如何呢?是否私下里有着交往呢? 12月1号,刘伟罕有于视频账号上分享了一段弹钢琴的画面,瞬间将粉丝拉回到12年前,仍然是那双熟悉的脚,仍然是那首熟悉…

    知识百科 2023-06-08
  • 刚刚充值的流量怎么用(怎么给别人充值流量)

    前段时间,微信更新后支持发送4k原视频,这样虽然可以保证视频的画质不被压缩。但是每次用手机接收微信的视频,月头刚充的流量又见底了! 今天告诉你们3个隐藏技巧,学会再发视频,超省流量的! 1.修改后缀名 普通的视频一般都是MP4格式,我们可以在手机里的文件管理中找到视频,把后缀名“MP4”修改为“M4V”,然后发送过去,接收后不用再修改也能正常播放。 但这种方…

    2023-05-30 知识百科
  • 中餐宴会菜单 本次宴会菜单有什么

    #头条创作挑战赛# 炝锅鲜鲍鱼 原料: 鲜鲍4只笋片100克青红小米椒碎30克芹菜碎20克姜米、蒜米、葱花、盐、酱油、白糖、味精、红油、鸡油各适量制作:1.把笋片投沸水锅里飞水后,放盘里垫底;另取鲍鱼片成片,然后投入加有盐和料酒的沸水锅里汆断生,捞出来盛盘内笋片上边。2.取姜米、蒜米、葱花、盐、酱油、白糖、味精和红油纳碗,调成红油味汁后浇在盘中鲍片上。另锅上…

    知识百科 2023-06-06
  • where是什么意思中文(when是什么意思)

    英语中有许多表示酒的单词,如alcohol,booze,drink,liquor都可以泛指酒类.除此之外,spirits也可以指烈性酒.Spirit有”精神,心灵,灵魂”的意思,那么酒精和灵魂有什么关系?为什么烈性酒可以用spirits表示? [Photo/Pexels] According to VinePair, one theo…

    2023-05-28
  • 极品飞车9配置(极品飞车9配置文件)

    时间就是金钱,为了提高刷任务的效率以及速度,几乎所有的五开玩家不断更新装备以及召唤兽的目的就是为了提高打怪的效率。因为在有限的时间之内打得怪越多,获得的奖励就越多,有没有物品奖励先不说,起码金币奖励肯定是增加的。目前最热门的高效率抓鬼任务宠就是全力宠,而全力宠里面就数网红老鼠最受五开的青睐。下面给大家展示一下一组号称129级抓鬼效率五开,携带9红全力老鼠,1…

    2023-05-25 知识百科
  • 网站流量统计分析(网站流量统计分析的维度包括)

    做新闻和有效信息传达,需要判断内容和媒介的效果。这么多学新传的,多是纸上谈兵。以为知识的形态是竹简,世界的尽头在知网,要革竹子致知。 最近一个月,尝试了一下各媒体和自媒体号的流量情况,也算用算法来比对各平台算法,尝试对其分析。   百度百家号在搜索引擎收录方面效果最好,源于其本身的搜索属性并自带流量,十几个阅读展现就有一两个赞,展现效果真实且互动性…

    2022-01-27 知识百科
  • 手机屏幕分辨率,最新手机屏幕分辨率大全

    【1】vivo Xplay 3S 搭载高通骁龙801处理器,采用台积电28nm的工艺制程,内嵌Adreno 330 GPU,频率高达550MHz,提供强劲视觉引擎,给你更流畅顺滑视觉体验 正面是一块6英寸的LCD直屏,支持2K的分辨率,色彩鲜艳,文字清晰锐丽,细节丰富,画面生动,还原真实精彩世界,带来震撼的视觉体验 3200mAh的电池,搭配10W的有线充电…

    知识百科 2023-05-09
  • 蒋介石五虎上将是谁(蒋介石的五虎上将结局)

    面对诱惑,很多人不愿意去思考,之所以不想,只是因为被眼前的利益所迷惑了,大家只想着眼前的美好,却从来都没有感受到危机的存在。国民党和共产党身上流淌的都是华夏血液,可是因为各自为政,所拥护所追求的东西不同,国民党和共产党产生了很大的争执,也曾血流成河。   在前期国民党无论是在人数还是在武器上面,都是要远远胜于共产党的,可是最终共产党战胜了国民党。共…

    2021-11-30 知识百科
  • 淘宝刷动态评分用什么刷(刷动态评分处罚)

    淘宝动态评分是很多商家都在看的数据。毕竟在一定程度上会直接影响门店的成交率。为了快速提高动态评分,大多数商家会采用通过补单的方式来补动态评分。对于这种操作,平台是严令禁止的,如果被抓,会受到一定程度的处罚。那么淘宝动态评级被降级是真的吗? 淘宝动态评分降级是真的吗?怎么化妆? 1.淘宝动态评分降级是真的吗? 淘宝动态评级有可能降级。具体处罚措施视商家违规程度…

    知识百科 2021-12-09