一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - 快速排序的算法思想及Python版快速排序的實現(xiàn)示例

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

2020-08-31 11:27cangmean Python

快速排序算法來源于分治法的思想策略,這里我們將來為大家簡單解析一下快速排序的算法思想及Python版快速排序的實現(xiàn)示例:

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

1.分治法的基本思想

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

2.快速排序的基本思想

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

(1)分解:

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

注意:

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

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

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

(2)求解:

通過遞歸調(diào)用快速排序?qū)ψ?、右子區(qū)間R[low..pivotpos-1]和R[pivotpos+1..high]快速排序。

(3)組合:

因為當"求解"步驟中的兩個遞歸調(diào)用結(jié)束時,其左、右兩個子區(qū)間已有序。對快速排序而言,"組合"步驟無須做什么,可看作是空操作。

Python實現(xiàn)

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/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 li
 
def 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 hight
 
def 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 l
 
if __name__ == '__main__':
 main()

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 秋霞一级黄色片 | 风间由美一区二区av101 | 骚b小说| 日日操天天射 | 国产免费看片 | 五月天婷婷精品免费视频 | 国产欧美国产综合第一区 | ass巨大胖女人sias | 国产成人在线综合 | 亚洲mv国产精品mv日本mv | 青青青视频免费线看 视频 青青青青青国产免费手机看视频 | 国产一区二区播放 | 亚洲热在线观看 | 欧美成人午夜片一一在线观看 | 日本不卡在线观看免费v | 2022日韩理论片在线观看 | 美女的隐私脱裤子无遮挡 | 秋霞鲁丝影院久久人人综合 | 国产福利一区二区精品视频 | 久久性生大片免费观看性 | 天天综合色网 | 精品国产一区二区三区在线观看 | 国产在线精品观看 | 草草影院国产 | 高h辣文小说网 烧书阁 | 97精品久久天干天天蜜 | 久久精品国产欧美日韩99热 | 日本高清免费不卡在线 | 精品国产自在天天线2019 | 果冻传媒在线视频观看免费 | 国产成人亚洲精品一区二区在线看 | 亚洲欧美成人综合久久久 | 亚洲aⅴ男人的天堂在线观看 | aaaa黄色片| 无码日韩精品一区二区免费 | 艾秋麻豆果冻剧传媒在线播放 | 暖暖 免费 高清 日本 在线 | 亚洲 制服 欧美 中文字幕 | 无人区免费一二三四乱码 | 亚洲AV午夜精品麻豆AV | 青青草原伊人网 |