排序演算法之快速排序,氣泡排序用python程式碼實現
阿新 • • 發佈:2018-12-17
一、快速排序 1.在列表中選出一個基準數(通常為列表的第一個數) 2.將列表中小於基準數的資料移到基準列表的左邊,將大於基準數的資料移到基準數的右邊 3.對於基準數左,右兩邊的列表,不斷重複以上兩個過程,直到每個子集只有一個元素, 即為全部有序的.
def quicksort(nums): #判斷列表是否為空 if len(nums) <= 1: return nums #定義一個左子列表 left = [ ] #定義一個右子列表 right = [ ] #選出一個基準數 base = nums.pop() #通過和基準數做比較,劃分列表 for x in nums: if x < base: left.append(x) else: right.append(x) #返回重新組合的列表 return quicksort(left) + [base] + quicksort(right) def main(): nums = [6,1,2,7,9,3,4,5,10,8] print quicksort(nums) main()
在python2.7的環境下,執行結果如下: 成功完成了排序。 二、氣泡排序 氣泡排序:它重複地編歷要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來,編歷數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成(越小的元素會經由交換慢慢“浮“到數列頂端) 排序過程: 1.比較相鄰的元素,如果第一個比第二個大,交換它們倆. 2.對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對. 這步做完,最後的元素會是最大的數. 3.針對所有元素,重複以上步驟,除最後一個. 4.持續每次對越來越少的元素重複上面的步驟,直到無數字需要比較.
def bubblesort(list): #判斷列表是否為空 if list != None: #如果列表的元素為一個,則什麼也不做 if len(list) == 1: pass else: for i in range(len(list)): for j in range(len(list)-1): if list[j] > list[j+1]: list[j],list[j+1]=list[j+1],list[j] print (list) list1 = [2,5,4,8,6,1,9] bubblesort(list1)
執行結果如下: 時間複雜度為O(n^2)