快速排序

✍ dations ◷ 2025-08-21 04:00:54 #快速排序

快速排序(英语:Quicksort),又称分区交换排序(partition-exchange sort),简称快排,一种排序算法,最早由东尼·霍尔提出。在平均状况下,排序 n {displaystyle n} less, pivotList, greater if length(q) ≤ 1 return q else { select a pivot value from q for each x in q except the pivot element { if x < pivot then add x to less if x ≥ pivot then add x to greater } add to pivotList return concatenate(quicksort(less), pivotList, quicksort(greater)) } }

原地(in-place)分割的版本

storeIndex = left for i from left to right-1 { if a < pivotValue { swap(a, a) storeIndex = storeIndex + 1 } } swap(a, a) return storeIndex }

这是原地分割算法,它分割了标示为"左边(left)"和"右边(right)"的序列部分,借由移动小于a的所有元素到子序列的开头,留下所有大于或等于的元素接在他们后面。在这个过程它也为基准元素找寻最后摆放的位置,也就是它回传的值。它暂时地把基准元素移到子序列的结尾,而不会被前述方式影响到。由于算法只使用交换,因此最后的数列与原先的数列拥有一样的元素。要注意的是,一个元素在到达它的最后位置前,可能会被交换很多次。

一旦我们有了这个分割算法,要写快速排列本身就很容易:

 procedure quicksort(a, left, right)     if right > left         select a pivot value a         pivotNewIndex := partition(a, left, right, pivotIndex)         quicksort(a, left, pivotNewIndex-1)         quicksort(a, pivotNewIndex+1, right)

这个版本经常会被使用在命令式语言中,像是C语言。

快速排序是二叉查找树(二叉搜索树)的一个空间优化版本。不是循序地把数据项插入到一个明确的树中,而是由快速排序组织这些数据项到一个由递归调用所隐含的树中。这两个算法完全地产生相同的比较次数,但是顺序不同。对于排序算法的稳定性指标,原地分割版本的快速排序算法是不稳定的。其他变种是可以通过牺牲性能和空间来维护稳定性的。

快速排序的最直接竞争者是堆排序(Heapsort)。堆排序通常比快速排序稍微慢,但是最坏情况的执行时间总是 O ( n log n ) {displaystyle O(nlog n)} 和,不再被认为是占据固定的空间;也需要 O ( log n ) {displaystyle O(log n)} . Novosibirsk. 1991.

相关

  • 沃罗涅日沃罗涅日 (Воронеж)是俄罗斯沃罗涅日州首府。2014年人口为1,014,610人。始于1585年。沃罗涅日在顿河的支流沃罗涅日河上,与交汇处相距12公里。位于连接首都莫斯科和乌克
  • 深海平原深海平原是大洋深处平缓的海床,是地球上最平坦和最少被开发的地段。它们通常位于3000至6000米的深处,位于大陆架和大洋中脊之间,延展数百公里宽。它们的起伏通常很小,每公里相差
  • 森林消防森林消防是对于森林火灾的救援专业,野外的环境与城市火灾有大量不同,引燃物是低价值的树木同时人口稀少,而且水源取得困难,风向猛烈影响火情巨大,所以森林消防重心放在于火区的封
  • 傅锡祺傅锡祺(1872年9月12日-1946年8月47日),字复澄,号鹤亭,晚号澹庐老人,台湾府彰化县(今台中潭子)人,清光绪年间文武秀才,为潭子地方耆老。一生经历清领,日治,及民国时期。于台湾日治时期担
  • 罗芳罗芳(Lo Fong,1937年-),生于湖南长沙,自幼在书香世家成长,毕业于国立台湾师范大学美术系,于教育岗位上耕耘长达40年,育才无数。早年受到黄君璧、溥心畬、廖继春等影响,行脚纪实,不限材
  • 吴仕宏吴仕宏(1918年-2005年),男,四川通江人,中华人民共和国军事人物,中国人民解放军少将,曾任南京军区副司令员。
  • 村川大介村川大介(日语:村川 大介/むらかわ だいすけ ,1990年12月14日-),日本围棋职业棋手,出生于兵库县西宫市,隶属于关西棋院,师从森山直棋九段。村川大介作为关西棋院少有的奇才,肩负着关西
  • 欧梅县欧梅县(加利西亚语:Comarca do Eume,西班牙语:Comarca del Eume)是西班牙加利西亚自治区拉科鲁尼亚省的一个县,下辖5个市镇,县治是蓬特德乌梅。该县得名于欧梅河。
  • 费代里科·费利尼费代里科·费利尼(意大利语:Federico Fellini,1920年1月20日-1993年10月31日),意大利艺术电影导演,同时也是演员及作家。费代里科·费利尼出生于意大利的里米尼市,并在意大利电影导演罗伯托·罗塞里尼帮助下,开始参与电影制作。费代里科·费利尼曾先后5次摘取奥斯卡金像奖。1993年10月31日,他因心脏衰竭和呼吸系统功能性障碍不治,在罗马的翁贝托一号医院逝世。意大利政府后来为他举行国葬,而联合国教科文组织则铸造了费利尼勋章。费代里科·费利尼以独特的风格闻名于世,特别是混合梦境与巴洛克
  • 阳宗白鱼阳宗白鱼(学名:)为辐鳍鱼纲鲤形目鲴科白鱼属的鱼类,俗名白鱼,是中国的特有物种。分布于阳宗海等,常栖息于水体中上层以及繁殖期亲鱼在河口或地下水出口处。该物种的模式产地在阳宗海。体长可达21.7公分。 维基物种上的相关信息:阳宗白鱼