python 诠释 快速排序
快速排序使用分治法 (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