python——快速排序实现
2016-09-18 08:09
375 查看
快速排序(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()
快速排序的思路为:
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()
相关文章推荐
- 快速排序Python实现
- Python快速排序的实现方法
- python实现快速排序
- python实现快速排序和归并排序
- 快速排序(python实现)
- python和C语言分别实现快速排序
- 八大排序算法Java、Python、C++实现 -- 快速排序
- 快速排序Python实现
- python中实现二分查找,插入排序,归并排序,快速排序
- Python实现快速排序算法及去重的快速排序的简单示例
- 快速排序的python实现
- python 实现快速排序
- 快速排序,归并排序,堆排序python实现
- python实现快速排序
- Python实现快速排序
- python算法--快速排序详细实现
- python实现快速排序
- Python实现快速排序
- Python实现快速排序和插入排序算法及自定义排序的示例
- 快速排序的算法思想及Python版快速排序的实现示例