python五大基本演算法之快速排序
阿新 • • 發佈:2018-12-19
快速排序的思想:首先選取一個基準數(一般為第一個數),然後將比它小得數放到左邊,比它大的數放到右邊,這一個過程稱為一趟快速排序。 一趟快速排序的演算法是: 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-完成的時候,此時令迴圈結束)。 快速排序分析:
#快速排序 def func(my_list,start,end): #建立終止條件 if start >= end: return #x為左邊向右移動的遊標 #y為右邊向右移動的遊標 x,y = start,end #建立基準元素 base = my_list[start] while x < y: #當x<y,並且對應的元素都大於基準元素,遊標向左移動 while x < y and my_list[y] >= base: y = y - 1 #如果小於基準元素,則將值賦給x遊標對應的元素 my_list[x] = my_list[y] #當x<y,並且對應的元素都小於基準元素,遊標向右移動 while x < y and my_list[x] <= base: x = x + 1 #如果大於基準元素,則將值賦給y遊標對應的元素 my_list[y] = my_list[x] #當迴圈結束之後,x=y,則將基準元素賦值給x遊標對應的元素 my_list[x] = base #此時序列被分成了前後兩部分,利用遞迴呼叫繼續排序 #前半部分序列進行遞迴 func(my_list,start,y-1) #後半部分序列進行遞迴 func(my_list,y+1,end) return my_list if __name__ == '__main__': my_list = [45, 62, 23, 12, 54, 78, 96, 31] func(my_list, 0, len(my_list) - 1) print(my_list)
執行之後的結果為:
[12, 23, 31, 45, 54, 62, 78, 96]