国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

快速排序的算法思想及Python版快速排序的實(shí)現(xiàn)示例

2019-11-25 16:40:06
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

快速排序是C.R.A.Hoare于1962年提出的一種劃分交換排序。它采用了一種分治的策略,通常稱其為分治法(Divide-and-ConquerMethod)。

1.分治法的基本思想

分治法的基本思想是:將原問(wèn)題分解為若干個(gè)規(guī)模更小但結(jié)構(gòu)與原問(wèn)題相似的子問(wèn)題。遞歸地解這些子問(wèn)題,然后將這些子問(wèn)題的解組合為原問(wèn)題的解。

2.快速排序的基本思想

設(shè)當(dāng)前待排序的無(wú)序區(qū)為R[low..high],利用分治法可將快速排序的基本思想描述為:

(1)分解:

在R[low..high]中任選一個(gè)記錄作為基準(zhǔn)(Pivot),以此基準(zhǔn)將當(dāng)前無(wú)序區(qū)劃分為左、右兩個(gè)較小的子區(qū)間R[low..pivotpos-1)和R[pivotpos+1..high],并使左邊子區(qū)間中所有記錄的關(guān)鍵字均小于等于基準(zhǔn)記錄(不妨記為pivot)的關(guān)鍵字pivot.key,右邊的子區(qū)間中所有記錄的關(guān)鍵字均大于等于pivot.key,而基準(zhǔn)記錄pivot則位于正確的位置(pivotpos)上,它無(wú)須參加后續(xù)的排序。

注意:

劃分的關(guān)鍵是要求出基準(zhǔn)記錄所在的位置pivotpos。劃分的結(jié)果可以簡(jiǎn)單地表示為(注意pivot=R[pivotpos]):

R[low..pivotpos-1].keys≤R[pivotpos].key≤R[pivotpos+1..high].keys

其中l(wèi)ow≤pivotpos≤high。

(2)求解:

通過(guò)遞歸調(diào)用快速排序?qū)ψ蟆⒂易訁^(qū)間R[low..pivotpos-1]和R[pivotpos+1..high]快速排序。

(3)組合:

因?yàn)楫?dāng)"求解"步驟中的兩個(gè)遞歸調(diào)用結(jié)束時(shí),其左、右兩個(gè)子區(qū)間已有序。對(duì)快速排序而言,"組合"步驟無(wú)須做什么,可看作是空操作。

Python實(shí)現(xiàn)

原理: 先用初始數(shù)據(jù), 然后對(duì)這個(gè)數(shù)據(jù)進(jìn)行排序使左邊的數(shù)據(jù)小于
該數(shù)據(jù),右邊的大于該數(shù)據(jù),然后用遞歸的方法對(duì)兩邊的數(shù)據(jù)進(jìn)行依次排序。

#!/usr/bin/env python#_*_coding:utf-8_*_ def rand(x): import random if x < 3:  x = 5 if x > 1000:  print "big data"  return [] l = range(1, x) li = [] while l:  r = random.randint(0, len(l)-1)  li.append(l.pop(r)) return lidef quicksort(l, low, hight): key = l[low] while low < hight:  while key <= l[hight] and low < hight:   hight -= 1  l[low], l[hight] = l[hight], l[low]  while key >= l[low] and low < hight:   low += 1  l[low], l[hight] = l[hight], l[low] l[hight] = key return hightdef m_sort(l, low, hight): if low >= hgiht:  return  index = quicksort(l, low, hight) m_sort(l, low, index) m_sort(l, index+1, hight)def main(): l = rand(1500) m_sort(l, 0, len(l)-1) print lif __name__ == '__main__': main()

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 临海市| 蕉岭县| 南乐县| 吉安市| 宁化县| 敦化市| 定远县| 上思县| 文成县| 平舆县| 武强县| 汝州市| 湘阴县| 绵竹市| 龙州县| 林甸县| 开原市| 石楼县| 右玉县| 麻栗坡县| 乡宁县| 栾城县| 虞城县| 稻城县| 秦皇岛市| 广德县| 利辛县| 肇东市| 桐城市| 安宁市| 银川市| 诸暨市| 襄垣县| 黄山市| 扬中市| 威远县| 隆子县| 共和县| 金华市| 安远县| 资源县|