快速排序(Quick sort)
快速排序(Quick sort),又称划分交换排序
- 快速排序算法如下:
- 从数列中挑出一个元素,称为"基准"(pivot),
- 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
- 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序
- 时间复杂度:
- 最优时间复杂度:O(nlogn)
- 最坏时间复杂度:O(n2)
- 稳定性:不稳定
- 代码实现如下:
- 最优时间复杂度:O(nlogn)
#!/usr/bin/python
# coding=utf-8
def quick_sort(a_list, start, end):
"""快速排序"""
if start >= end:
return
# 定义一个基准
mid = a_list[start]
left = start
right = end
# 如果left与right未重合, left就向中间(右)移动
while left < right:
while left < right and a_list[right] >= mid:
right -= 1
a_list[left] = a_list[right]
while left < right and a_list[left] < mid:
left += 1
a_list[right] = a_list[left]
# 从循环退出后, left与right相遇, 即 left==right
a_list[left] = mid
# 用递归对左边部分执行快速排序
quick_sort(a_list, start, left-1)
# 用递归对右边部分执行快速排序
quick_sort(a_list, left+1, end)
if __name__ == '__main__':
li = [54, 26, 93, 17, 77, 31, 44, 55, 20]
print(li)
quick_sort(li, 0, len(li)-1)
print(li)
# 输出结果:
排序前: [54, 26, 93, 17, 77, 31, 44, 55, 20]
排序后: [17, 20, 26, 31, 44, 54, 55, 77, 93]
本文详细介绍了快速排序算法的工作原理及其实现过程。通过选取基准值进行分区操作,递归地将数组分为两部分并分别排序,最终实现整个数组的排序。文章提供了Python实现代码,并展示了排序前后数组的变化。
503

被折叠的 条评论
为什么被折叠?



