📜  门|门 IT 2005 |第 84 题(1)

📅  最后修改于: 2023-12-03 15:28:48.057000             🧑  作者: Mango

门|门 IT 2005 | 第 84 题

题目描述

在这道题目中,你需要解决的是一道经典的算法问题:快速排序。

你需要实现一个函数 quicksort(arr: List[int]) -> List[int],接受一个整数数组 arr,并返回一个新的数组,新数组中元素为原数组 arr 的排序结果。

解题思路

快速排序是一种分治思想的排序算法。具体的排序流程如下:

  1. 从数组中选择一个基准元素,通常选择第一个元素。
  2. 将数组中小于基准元素的放在基准元素的左边,大于等于基准元素的放在基准元素的右边。
  3. 递归处理基准元素左边和右边的子数组,直到数组长度为1或0。

这个算法对于长度为 $n$ 的数组,其时间复杂度为 $O(n \log n)$。

代码实现
from typing import List

def quicksort(arr: List[int]) -> List[int]:
    if len(arr) <= 1:
        return arr
    pivot = arr[0]
    left = []
    right = []
    for i in range(1, len(arr)):
        if arr[i] < pivot:
            left.append(arr[i])
        else:
            right.append(arr[i])
    return quicksort(left) + [pivot] + quicksort(right)
测试样例

输入:

arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
print(quicksort(arr))

输出:

[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
总结

快速排序是一种常见的排序算法,其时间复杂度为 $O(n \log n)$。在实际开发中,通常使用 Python 标准库中的 sorted() 函数来实现排序。