Python 实现快速排序算法

快速排序(Quick sort)

快速排序(Quick sort),又称划分交换排序

  • 快速排序算法如下:
    • 从数列中挑出一个元素,称为"基准"(pivot),
    • 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
    • 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序
  • 时间复杂度:
    • 最优时间复杂度:O(nlogn)
      • 最坏时间复杂度:O(n2)
      • 稳定性:不稳定
    • 代码实现如下:
#!/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)