快速排序使用分治法 (Divide and conquer)策略來把一個串行 (list)分爲兩個子串行(sub-lists)。
步驟爲:
- 從數列中挑出一個元素,稱爲 "基準"(pivot),
- 重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面(相同的數可以到任一邊)。在這個分區退出之後,該基準就處於數列的中間位置。這個稱爲分區(partition) 操作。
- 遞歸 地(recursive)把小於基準值元素的子數列和大於基準值元素的子數列排序。
遞歸的最底部情形,是數列的大小是零或一,也就是永遠都已經被排序好了。雖然一直遞歸下去,但是這個算法總會退出,因爲在每次的迭代(iteration)中,它至少會把一個元素擺到它最後的位置去。
(以上摘自 wiki)
python 實現爲:
def sub_sort(array,low,high) : 3 key = array[low] 4 while low < high : 5 while low < high and key <= array[high] : 6 high -= 1 7 while low < high and key > array[high] : 8 array[low] = array[high] 9 low += 1 10 array[high] = array[low] 11 array[low] = key 12 return low 13 14 15 16 def quick_sort(array,low,high) : 17 if low < high : 18 key_index = sub_sort(array,low,high) 19 quick_sort(array,low,key_index) 20 quick_sort(array,key_index+1,high) 21 22 23 if __name__ == '__main__': 24 array = [8,10,6,4,5,13,26,18] 25 print array 26 quick_sort(array,0,len(array)-1) 27 print array