''' 快速排序 經過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的全部數據都比另一部分的全部數據 都要小,而後再按此方法對這兩部分數據分別進行快速排序,整個過程能夠遞歸進行,以此達到整個數據 變成有序序列 ''' import time start = time.time() def quick_sort(alist, start, end): # 遞歸的退出條件 if start >= end: return # 選擇開頭第一個做爲中間數 mid = alist[start] # low爲序列左邊的由左向右移動的遊標 low = start # 反之 high = end '''左右兩邊的指針都往中間移動,直到相遇''' while low < high: # 若是low 與high 未重合, high指向的元素不比基準元素小,則high向左移動 while low < high and alist[high] >= mid: high -= 1 # 將high指向的元素放到low位置上 alist[low] = alist[high] while low < high and alist[low] < mid: low += 1 alist[high] = alist[low] # 退出循環後,low與high重合,此時所指位置爲基準元素的正確位置 # 將基準元素放到該位置 alist[low] = mid # 對基準元素左邊的子序列進行快速排序 quick_sort(alist, start, low-1) # 對基準的右邊的子序列進行快速排序 quick_sort(alist, low+1, end) if __name__ == '__main__': alist = [5,9,3,7,1,10,4,8,2,6] quick_sort(alist,0,len(alist)-1) print(alist) end = time.time() print(end-start)