python 八大排序快速排序

來源:互聯網
上載者:User

標籤:coding   ref   過程   def   style   迴圈   元素   個數   交換   

A、快速排序

1)設定兩個變數i、j,排序開始的時候:i=0,j=N-1;2)以第一個數組元素作為關鍵資料,賦值給 key,即 key=A[0];3)從j開始向前搜尋,即由後開始向前搜尋(j--),找到第一個小於 key的值A[j],將A[j]和A[i]互換;4)從i開始向後搜尋,即由前開始向後搜尋(i++),找到第一個大於 key的A[i],將A[i]和A[j]互換;

5)重複第3、4步,直到i=j; (3,4步中,沒找到合格值,即3中A[j]不小於key,4中A[i]不大於key的時候改變j、i的值,使得j=j-1,i=i+1,直至找到為止。找到合格值,進行交換的時候i, j指標位置不變。另外,i==j這一過程一定正好是i+或j-完成的時候,此時令迴圈結束)。

如列表:

  lst =[6,1,2,7,9,3,4,5,10,8]

[6, 1, 2, 7, 9, 3, 4, 5, 10, 8]
從右向左開始移動第一次
當j移動到5此時lst[j]小於key6
i j 值互換
[5, 1, 2, 7, 9, 3, 4, 6, 10, 8]
從左向右開始移動第一次
當i移動到7此時lst[i]大於key6
i j 值互換
[5, 1, 2, 6, 9, 3, 4, 7, 10, 8]
從右向左開始移動第二次
當j移動到4此時lst[j]小於key6
i j 值互換
[5, 1, 2, 4, 9, 3, 6, 7, 10, 8]
從左向右開始移動第二次
當i移動到9此時lst[i]大於key6
i j 值互換
[5, 1, 2, 4, 6, 3, 9, 7, 10, 8]
從右向左開始移動第三次
當j移動到3此時lst[j]小於key6
i j 值互換
[5, 1, 2, 4, 3, 6, 9, 7, 10, 8]
此時6 剛好在中間

lst分成兩部分

左邊[5, 1, 2, 4, 3]

右邊[9, 7, 10, 8]

重新按照剛剛排序方法

將得到結果
左邊[3, 1, 2, 4, 5]

右邊[8, 7, 9, 10]

繼續排序

.....(遞迴)

實現方法:

面向過程:

# -*- coding: gbk -*- __author__ = ‘HZQ‘lst = [6,1,2,7,9,3,4,5,10,8]i=0j=len(lst)-1key=lst[0]print(lst)print("從右向左開始移動第一次")while lst[j]>=key and j>i:    j-=1print("當j移動到{}此時lst[j]小於key{}".format(lst[j],key))print("i j 值互換")lst[i],lst[j]=lst[j],lst[i]print(lst)print("從左向右開始移動第一次")while lst[i]<=key and j>i:    i+=1print("當i移動到{}此時lst[i]大於key{}".format(lst[i],key))print("i j 值互換")lst[i],lst[j]=lst[j],lst[i]print(lst)print("從右向左開始移動第二次")while lst[j]>=key and j>i:    j-=1print("當j移動到{}此時lst[j]小於key{}".format(lst[j],key))print("i j 值互換")lst[i],lst[j]=lst[j],lst[i]print(lst)print("從左向右開始移動第二次")while lst[i]<=key and j>i:    i+=1print("當i移動到{}此時lst[i]大於key{}".format(lst[i],key))print("i j 值互換")lst[i],lst[j]=lst[j],lst[i]print(lst)print("從右向左開始移動第三次")while lst[j]>=key and j>i:        j-=1print("當j移動到{}此時lst[j]小於key{}".format(lst[j],key))print("i j 值互換")lst[i],lst[j]=lst[j],lst[i]print(lst)

物件導向:

# -*- coding: gbk -*- __author__ = ‘HZQ‘lst = [6,1,2,7,9,3,4,5,10,8]def minddle_index(lst,low,high):    start_index=low#最左邊    end_index=high#左右邊    if start_index<end_index:#前提條件右邊大於左邊        key=lst[start_index]#設定參照key        while end_index>start_index:            while lst[end_index]>=key and end_index>start_index:                end_index-=1            lst[start_index],lst[end_index]=lst[end_index],lst[start_index]            while lst[start_index]<=key and end_index>start_index:                start_index+=1            lst[start_index],lst[end_index]=lst[end_index],lst[start_index]        #迴圈排序,遞迴        minddle_index(lst,low,start_index-1)#左邊lst再次排序        minddle_index(lst,end_index+1,high)#右邊lst再次排序minddle_index(lst,0,len(lst)-1)print(lst)

 

python 八大排序快速排序

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.