快速排序是對冒泡排序的一種改進翰萨。
他的基本思想是:通過一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)要小糕殉,然后按照此方法對這兩部分?jǐn)?shù)據(jù)分別進行快速排序亩鬼,整個排序過程可以遞歸進行,以此達到整個數(shù)據(jù)變成有序序列阿蝶。
第一種方法:
def qsort(array, low, high):
? ? ? if low < high:
? ? ? ? ? m = subsort(array, low, high)
? ? ? ? ? qsort(array, low, m -1)
? ? ? ? ? qsort(array, m+1, high)
? def subsort(array, low, high):
? ? ? key = array[low]
? ? ? while low < high:
? ? ? ? ?while low < high and array[high] >= key:
? ? ? ? ? ? ?high -= 1
? ? ? ? ?while low < high and array[high] < key:
? ? ? ? ? ? ?array[low] = array[high]
? ? ? ? ? ? ?low += 1
? ? ? ? ? ? ?array[high] = array[low]
? ? ?array[low] = key
? ? ?return low
?if __name == "__main__":
? ? ?li = [34,1,2,99,45,0,123,66,54,21]
? ? ?print li
? ? ?qsort(li, 0, len(li)-1)
? ? ?print li
第二種方法:
li = [44,1,2,7,655,88,99,12,63,0]
def qsort(li):
? ? ?if len(li) <= 1:
? ? ? ? ?return li
? ? ?return qsort([i for i in li[1:] if i < li[0]]) + li[0:1] + qsort([j for j in li[1:] if j >= li[0]])
?print li
?print qsort(li)