快速排序算法又称划分交换排序(partition-exchange sort),一种​​排序算法​​,最早由​​东尼·霍尔​​提出。在平均状况下,

排序n个项目要O(nlogn)次比较。在最坏状况下则需要O(n*2)次比较,但这种状况并不常见。事实上,快速排序通常明显比

其他算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。

快速排序使用​​分治法​​(Divide and conquer)策略来把一个​​序列​​(list)分为两个子序列(sub-lists)。

步骤为:

  1. 从数列中挑出一个元素,称为"基准"(pivot),
  2. 重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(相同的数可以到任何一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
  3. ​递归​​地(recursively)把小于基准值元素的子数列和大于基准值元素的子数列排序。

递归到最底部时,数列的大小是零或一,也就是已经排序好了。这个算法一定会结束,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。

  算法实现示意图,摘自百科:

python实现快速排序算法_分治法

 

  python代码实现:



def quick_sort(a_list):
quicksort_sub(a_list,0,len(a_list) - 1)

def quicksort_sub(lst, lo, hi):
if lo < hi:
p = partition(lst, lo, hi)
quicksort_sub(lst, lo, p)
quicksort_sub(lst, p+1, hi)
return

def partition(lst, lo, hi):
pivot = lst[hi-1]
i = lo - 1
for j in range(lo, hi):
if lst[j] < pivot:
i += 1
lst[i], lst[j] = lst[j], lst[i]
if lst[hi-1] < lst[i+1]:
lst[i+1], lst[hi-1] = lst[hi-1], lst[i+1]
return i+1

a_list = [54,26,93,17,77,31,44,55,20]
quick_sort(a_list)
print a_list


该算法创始人安东尼爵士,是一位计算机领域的大牛,他的几大贡献(设计了​​快速排序​​​​算法​​、​​霍尔逻辑​​、​​交谈循序程式​​。提出了操作系统中的哲学家就餐问题),每个单独拎出来都可以在计算机历史上留名。翻开前辈的履历,才发现该前辈的经历十分

丰富,学过艺术,当过兵,学过俄语,做过教育,闯过职场,不过,最终他选择了计算机作为灵魂深处的归宿,并凭着在计算机领域的神话般的造诣,创造了一个又一个神话,开编译器,设计算法,研究操作系统。

这样的前辈,只能用这句话来表达笔者的敬仰之情-----高山仰止 景行行止。

参考目录:

1 https://zh.wikipedia.org/wiki/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F 

2 算法导论

3 python解决算法问题