应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

Python快速排序和归并排序

  快速排序(Quicksort)
  快速排序,是每次找一个数字(一般是列表的第一个元素)作为中间值,将小于这个中间值的元素都放在左边,比这个中间值大的放在右边。然后,对左边和右边的子序列进行递归操作,即可实现排序。只有一个元素的序列是有序的。
  将列表中第一个元素设定为基准数字,赋值给mid变量,然后将整个列表中比基准小的数值放在基准的左侧,比基准到的数字放在基准右侧。然后将基准数字左右两侧的序列在根据此方法进行排放。定义两个指针,low指向最左侧,high指向最右侧。然后对最右侧指针进行向左移动,移动法则是,如果指针指向的数值比基准小,则将指针指向的数字移动到基准数字原始的位置,否则继续移动指针。如果最右侧指针指向的数值移动到基准位置时,开始移动最左侧指针,将其向右移动,如果该指针指向的数值大于基准则将该数值移动到最右侧指针指向的位置,然后停止移动。如果左右侧指针重复则,将基准放入左右指针重复的位置,则基准左侧为比其小的数值,右侧为比其大的数值。
  首先,对于第一个元素进行操作。调整后的列表中,该元素左边的元素都比它小,右边的元素都比它大:alist〔3,8,5,7,6,9,2,1,4,6,3,3,2〕使用重复值更严谨defquicksort(alist):left0第一个元素下标rightlen(alist)1最后一个元素下标循环过后的序列中,要确保小于等于基准值的数字在基准值右侧,大于基准值的数在其左侧whileleftright:先偏移right,此时基准值3位于left对应的位置whileleftright:ifalist〔right〕alist〔left〕:right1如果right对应的值比基准值大,不需要操作,比较下一个数字else:如果right对应的值比基准值小(或等于),则将其与基准值交换位置alist〔right〕,alist〔left〕alist〔left〕,alist〔right〕left1因为原来基准值的位置left的元素已经检查过了,不需要重复检查,所以直接去下一个元素即可breakwhileleftright:先偏移left,此时基准值3位于right对应的位置ifalist〔right〕alist〔left〕:left1如果left对应的值比基准值小或者相等,不需要操作,比较下一个数字else:如果left对应的值比基准值大,将其于基准值交换位置alist〔right〕,alist〔left〕alist〔left〕,alist〔right〕right1因为原来基准值的位置right的元素已经检查过了,不需要重复检查,所以直接去下一个元素即可breakprint(left,right)55returnalistprint(quicksort(alist))〔2,3,3,1,2,3,9,6,4,6,7,5,8〕
  经一次操作后,左右两侧的索引都到了5的位置。接下来,我们对左右两部分的列表进行递归,即可实现快速排序:alist〔3,8,5,7,6,9,2,1,4,6,3,3,2〕defquicksort(alist,start,end):leftstartrightendwhileleftright:whileleftright:ifalist〔left〕alist〔right〕:right1else:alist〔left〕,alist〔right〕alist〔right〕,alist〔left〕left1breakwhileleftright:ifalist〔left〕alist〔right〕:left1else:alist〔left〕,alist〔right〕alist〔right〕,alist〔left〕right1break上述为核心操作,需要将核心操作递归左右到左右子序列中ifstartleft1:结束递归条件:当左侧只剩一个元素或没有元素时quicksort(alist,start,left1)将sort作用到左侧序列中ifright1end:结束递归条件:当右侧只剩一个元素或没有元素时quicksort(alist,right1,end)将sort作用到右侧序列中returnalistquicksort(alist,0,len(alist)1)〔1,2,2,3,3,3,4,5,6,6,7,8,9〕归并排序(Mergesort)
  归并排序采用分而治之的原理:将一个序列从中间位置分成两个序列;在将这两个子序列按照第一步继续二分下去;直到所有子序列的长度都为1,也就是不可以再二分截止。这时候再两两合并成一个有序序列即可。
  如何合并?
  下图中的倒数第三行表示为第一次合并后的数据。其中一组数据为48,57。该两组数据合并方式为:每一小组数据中指定一个指针,指针指向每小组数据的第一个元素,通过指针的偏移指定数据进行有序排列。排列情况如下:p1指向4,p2指向5,p1和p2指向的元素4和5进行比较,较小的数据归并到一个新的列表中。经过比较p1指向的4会被添加到新的列表中,则p1向后偏移一位,指向了8,p2不变。p1和p2指向的元素8,5继续比较,则p2指向的5较小,添加到新列表中,p2向后偏移一位,指向了7。p1和p2指向的元素8,7继续比较,7添加到新列表中,p2偏移指向NULL,比较结束。最后剩下的指针指向的数据(包含该指针指向数据后面所有的数据)直接添加到新列表中即可。
  归并排序使用Python代码实现:alist〔3,8,5,7,6,9,2,1,4,6,3,3,2〕defmergesort(alist):nlen(alist)递归结束条件ifn1:returnalist将序列分成左右两部分,递归排序midn2leftmergesort(alist〔:mid〕)rightmergesort(alist〔mid:〕)将指针归零leftpointerrightpointer0result〔〕用于存放排序好的结果比较指针位置的数字,较小的放到结果中,并依次移动指针whileleftpointerlen(left)andrightpointerlen(right):ifleft〔leftpointer〕right〔rightpointer〕:result。append(left〔leftpointer〕)leftpointer1else:result。append(right〔rightpointer〕)rightpointer1将左右两边剩余的元素直接放到结果中result。extend(left〔leftpointer:〕)result。extend(right〔rightpointer:〕)将结果返回returnresultprint(mergesort(alist))〔1,2,2,3,3,3,4,5,6,6,7,8,9〕

好软推荐简单几步,让Windows的字体变成Mac一样好看本内容来源于什么值得买APP,观点仅代表作者本人作者:StarkC大家好,我是StarkC。我想用过苹果Mac电脑的小伙伴都知道,苹果Mac不光系统的UI非常漂亮,……女人长斑点就显老?这个小方法坚持用,皮肤婴儿般白皙光滑一个冬天过去,不少人直呼再怎么防晒,都挡不住脸上的色斑,一茬接一茬地出现,那现在春天到了,呼声最高的就是美白、淡斑类的产品对于长斑这件事,我可太有体会了!初中的时候就脸上……新能源转型最受益的板块,今年表现如何最早从10年开始,我国对于新能源汽车的补贴政策就开始了,当时的政策是自2010年起,消费者购买新能源汽车可以享受单车4800元至12600元不等的国家新能源车购置补贴。补贴政策……莴笋或是新抗癌霸主?医生建议莴笋别乱吃,3类人或不合适癌症是全球人类最难攻克一劲敌,从古到今,大家对于癌症的研究话题一直没有放弃,随着社会的发展,人们的养生意识越来越强,认为日常生活当中的饮食或是癌症的凶手。网络上,养生达人……这7个免费的微信小程序,却把收费软件的活都干了其实微信上有很多小程序完成可以代替手机APP,不用下载就可以直接使用,下面分享7个免费的微信小程序,却把收费软件的活都干了。1、吐司工具箱APP有百宝工具箱,其实小……哪些饮食习惯会导致钙流失?补钙这件事,相信经常被很多人挂在嘴边从我们幼童时期就会开始补钙;稍大一点后,父母怕孩子身体缺钙,还会购买一些钙片来补钙。但是很多人仍然会缺钙,这是为什么呢?或许,这……后端网络编程与通信原理一、基础概念不同设备之间通过网络进行数据传输,并且基于通用的网络协议作为多种设备的兼容标准,称为网络通信;以CS架构来看,在一次请求当中,客户端和服务端进行数据传输……过年包饺子包子想要好吃,调馅是关键,饭店不外传秘诀,鲜嫩流汁咱们在平时的时候经常吃包子,饺子之类需要馅料的美食,而包子,饺子好不好吃主要取决于馅料调得好不好,如果馅料非常好吃,那么包子和饺子就特别好吃。今天就来跟大家分享一个调肉馅的方法……中国人带5000元去泰国旅游,到底能享受什么待遇?这些都能满如今人们都爱出门旅游,其实不论在世界上哪个国家旅游,我们只要解决这三个问题,基本上都能玩的比较顺畅:住宿问题、交通问题以及吃饭的问题。(此处已添加小程序,请到今日头条客户端查看……格林班克小镇居民为何无缘WiFi?只因绿岸天文台设置在此参考HighSpeedInternet。com的数据,全美平均WiFi速率已高达99。3Mbps。结合蜂窝移动网络的普及,城镇居民几乎可随时随地连接到互联网,无缝体验高清流媒体……春天的美味韭菜炒螺蛳肉宝应的春天,有一道菜是非常好吃的,就是韭菜炒螺蛳肉。不过,这道菜必须在清明前吃,过了清明,韭菜也不嫩不香了,螺蛳肉也老了不鲜了。老人都说,这道菜是亮眼明目的,吃了对眼睛有好处。……菲律宾人在中国哪个部门可以办理结婚证?在哪个国家结婚,就要遵守哪个国家的法律规定,所以菲律宾人去中国结婚需要的资料都要按照中国的婚姻规定来准备。而涉外婚姻所准备的资料要比国内公民结婚准备的资料要更多,那么我们带菲律……
为什么半身裙这么流行?看这些40女性的穿搭就知道,优雅又显瘦自信的女人时刻散发着光芒,不管是淡淡的妆容还是得体的穿搭,这些都是能让女性增强自信的重要因素。在穿衣方面,四十岁的女士要追求高质感。可以看出半身裙在春日街头的出镜频率极高,那是……跟大家聊聊炒股开户快吗炒股开户的步骤又有哪些呢如今越来越来的人在关注着关于财经方面的知识,因为现在大多数人都会进行一些理财投资,所以也就需要了解这方面的财经知识,例如说现在不少人就对于炒股开户快吗炒股开户的步骤又有哪些呢方……离婚是在哪里办(离婚需要准备什么材料)离婚真的那么难吗?都需要准备些什么?作为婚姻律师,客观地跟大家说,是的!离婚从来都不是一件容易的事儿。打算离婚了,需要准备什么?在我接到的很多咨询者这样的提问中,有的是刚……郭艾伦身体检查报告单曝光足底筋膜炎及大腿内侧筋肉损伤成隐患北京时间3月4日,社交媒体上今日曝光了一份郭艾伦的身体检查报告,从报告中显示,郭艾伦目前身体有多处伤病,包括足底筋膜炎,大腿肌肉内侧损伤,以及颈部淋巴结增大等。在第三阶段……课件是什么(课件下载免费)备课是每个老师必不可少的工作,尤其是需要使用PPT课件的课程,一边备课一边学习PPT真的令人头秃,拿怎么样才能做到快速制作PPT课件呢?今天就给大家分享7个免费且资源丰富……康庄版的开往春天的列车地铁直达还不要门票,你来打卡了吗?春天到了,到处都充满生机,各种梅花,樱花,油菜花等都悄悄绽放了。去年佛图关公园2号线,开往春天的列车着实火了一把,没想到今年6号线的康庄也能……如何改善便秘问题?清好清畅助你一臂之力!如今小长假已经过完,大家陆陆续续回到了正常的工作状态中,很多人在假期期间,生活规律打乱、饮食变得不规律,上班之后便秘问题也就出现了。便秘对身心危害都比较大,那么如何改善便秘问题……女明星时尚大片造型PK,你认为谁更有明星范?女明星不管是时尚杂志拍摄,还是参加时尚活动,难免会出现相似的场景。这个时候,就看个人的表现力,或妖娆,或清纯,或活力都是时尚表现的一种方式。今天咱们就来看看女明星时尚大片造型P……京东换货多久(京东换货一般多久能送回来)昨天下午,一场持续2小时的11。11京东全球好物节发布会,揭开了2019年京东双11购物狂欢的大幕。百亿补贴千亿优惠、12亿件低价好物、2亿件反向定制产品、PLUS会员享百款全……李盈莹缺点再次暴露,高意难获上场机会,王媛媛证明自己中国女排和巴西的比赛已经结束,意料之中的我们输给了对手,不过意料之外的是这场比赛竟然打了五局,这也是中国队本次赛事的第二场五局大战,虽然都输了球,但是对阵泰国和对阵巴西,球员的……美国空军研究实验室将直播BoltII高超音速飞行系统测试美国空军研究实验室(AFRL)与空军科学研究院办公室(AFOSR)刚刚宣布,其计划在当地时间晚间,通过NASAWallops油管频道,直播在弗吉尼亚州的火箭发射。本次任务的主角……暗黑相机!宾得K早前理光表示旗下的宾得和GR品牌将放弃传统的大规模生产及经销商系统,改为以工房方式制造,并直接通过网上平台进行销售和产品推广,而在去年11月27日举行的在网上粉丝活动Penta……
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网