快速排序(quick sort)是一种分治排序算法。
快速排序的思路为:
1、选取一个划分元素(partition element,有时又称为pivot);
2、重排列表将其划分为三个部分:left(小于划分元素pivot的部分)、划分元素pivot、right(大于划分元素pivot的部分),此时,划分元素pivot已经在列表的最终位置上;
3、分别对left和right两个部分进行递归排序。
代码实现如下:
#! /usr/bin/python
# -*- coding:UTF-8 -*-
def excute_quicksort(num_list):
qsort(num_list, 0, len(num_list) - 1)
return num_list
def qsort(num_list, first, last):
if first < last:
split = quicksort(num_list, first, last)
qsort(num_list, first, split - 1)
qsort(num_list, split + 1, last)
def quicksort(num_list, first, last):
pivot = num_list[first]
leftmark = first + 1
rightmark = last
while True:
while pivot >= num_list[leftmark]:
if leftmark == rightmark:
break
leftmark += 1
while pivot < num_list[rightmark]:
rightmark -= 1
if leftmark < rightmark:
num_list[leftmark], num_list[rightmark] = num_list[rightmark], num_list[leftmark]
else:
break
num_list[first], num_list[rightmark] = num_list[rightmark], num_list[first]
return rightmark
def main():
num_list = [5, 7, 1, 3, 6]
print 'before sort:', num_list
print 'after sort', excute_quicksort(num_list)
if __name__ == "__main__":
main()