python 詮釋 快速排序

 

快速排序使用分治法 (Divide and conquer)策略來把一個串行 (list)分爲兩個子串行(sub-lists)。

步驟爲:

  1. 從數列中挑出一個元素,稱爲 "基準"(pivot),
  2. 重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面(相同的數可以到任一邊)。在這個分區退出之後,該基準就處於數列的中間位置。這個稱爲分區(partition) 操作。
  3. 遞歸 地(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