快速排序 Python實現


說起快排的Python實現,首先談一下,快速排序的思路:

1、取一個參考值放到列表中間,初次排序后,讓左側的值都比他小,右側的值,都比他大。

2、分別對左側和右側的部分遞歸第1步的操作

實現思路:

  • 兩個指針left,right分別指向列表的第一個元素和最后一個元素,然后取一個參考值,默認為第一個列表的第一個元素list[0],稱為K
  • 然后left指向的值先和參考值K進行比較,若list[left]小於或等於K值,left就一直向右移動,left+1,直到移動到大於K值的地方,停住
  • right指向的值和參考值K進行比較,若list[right]大於K值,right就一直向左移動,right-1,直到移動到小於K值的地方,停住
  • 此時,left和right若還沒有相遇,即left還小於right,則二者指向的值互換
  • 若已經相遇則說明,第一次排序已經完成,將list[right]與list[0]的值進行互換,進行之后的遞歸

編程實現:

 1 #快排的主函數,傳入參數為一個列表,左右兩端的下標
 2 def QuickSort(list,low,high):
 3     if high > low:
 4         #傳入參數,通過Partitions函數,獲取k下標值
 5         k = Partitions(list,low,high)
 6         #遞歸排序列表k下標左側的列表
 7         QuickSort(list,low,k-1)
 8         # 遞歸排序列表k下標右側的列表
 9         QuickSort(list,k+1,high)
10 
11 def Partitions(list,low,high):
12     left = low
13     right = high
14     #將最左側的值賦值給參考值k
15     k = list[low]
16     #當left下標,小於right下標的情況下,此時判斷二者移動是否相交,若未相交,則一直循環
17     while left < right :
18         #當left對應的值小於k參考值,就一直向右移動
19         while list[left] <= k:
20             left += 1
21         # 當right對應的值大於k參考值,就一直向左移動
22         while list[right] > k:
23             right = right - 1
24         #若移動完,二者仍未相遇則交換下標對應的值
25         if left < right:
26             list[left],list[right] = list[right],list[left]
27     #若移動完,已經相遇,則交換right對應的值和參考值
28     list[low] = list[right]
29     list[right] = k
30     #返回k值
31     return right
32 
33 list_demo = [6,1,2,7,9,3,4,5,10,8]
34 print(list_demo)
35 QuickSort(list_demo,0,9)
36 print(list_demo)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM