[算法笔记]: Python 实现的快速排序

143 阅读1分钟

算法思路

1.	选择一个阈值,将比阈值小的对象放入子序列X中,将比阈值大的对象放入子序列Y中

2. 	若子序列X中的对象超过一个,则递归对子序列X排序

3. 	若子序列Y中的对象超过一个,则递归对子序列Y排序

4.	连接子序列X,Y得到最终排序后的结果

Python实现

def quick_sort(numbers):
    if len(numbers) <= 1:
        return numbers

    # 左子数组
    less = []
    # 右子数组
    greater = []
    # 基准数
    base = numbers.pop()

    # 对原数组进行划分
    for x in numbers:
        if x < base:
            less.append(x)
        else:
            greater.append(x)

    # 递归调用
    return quick_sort(less) + [base] + quick_sort(greater)

待排序的数组

numbers = [54, 31, 88, 87, 92, 87, 10, 39, 59, 22, 25, 59, 11, 28, 66]

排序完成的结果

numbers = [10, 11, 22, 25, 28, 31, 39, 54, 59, 59, 66, 87, 87, 88, 92]

心得

  • 最坏情况下的时间复杂度是O(n^2)
  • 平均意义下的时间复杂度是O(nlogn)