Python递归实现快速排序算法

2023-04-15 00:00:00 算法 排序 递归

快速排序是一种基于分治思想的排序算法,它将一个数组分成两个子数组,分别递归地进行排序,在子数组都排好序后,将它们合并成一个有序的数组。具体的实现过程如下:
1. 选择一个元素作为基准值(pivot),通常选择第一个或者最后一个元素。
2. 将小于等于基准值的元素移动到左侧,将大于基准值的元素移动到右侧。
3. 对左右两个子数组递归地进行快速排序。
4. 合并左右两个子数组,得到最终的有序数组。
下面是Python递归实现快速排序的示例代码:

def quick_sort(arr):
    if len(arr) <= 1:   # 如果数组只有一个元素,直接返回
        return arr
    pivot = arr[0]      # 选择第一个元素作为基准值
    left = [x for x in arr[1:] if x <= pivot]   # 将小于等于基准值的元素移动到左侧
    right = [x for x in arr[1:] if x > pivot]   # 将大于基准值的元素移动到右侧
    return quick_sort(left) + [pivot] + quick_sort(right)  # 递归地进行排序,并合并左右两个子数组

在上面的代码中,我们使用列表推导式将小于等于基准值的元素移动到左侧,将大于基准值的元素移动到右侧。然后递归地对左右两个子数组进行快速排序,最后再将它们合并起来。
下面是一个示例,演示如何使用上面的代码对一个数字数组进行排序:

arr = [5, 2, 7, 3, 1, 6, 4]
sorted_arr = quick_sort(arr)
print(sorted_arr)   # 输出 [1, 2, 3, 4, 5, 6, 7]

如果需要使用字符串作为范例,可以将上面的代码稍作修改:

def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[0]
    left = [x for x in arr[1:] if x <= pivot]
    right = [x for x in arr[1:] if x > pivot]
    return quick_sort(left) + [pivot] + quick_sort(right)
arr = ["p", "i", "d", "a", "n", "c", "o", "d", "e", ".", "c", "o", "m"]
sorted_arr = quick_sort(arr)
print(sorted_arr)   # 输出 [".", "a", "c", "c", "d", "e", "i", "m", "n", "o", "p"]

在这个示例中,我们使用字符串作为数组,实现的过程与使用数字数组差不多,只是比较大小的操作变成了使用小于等于操作符和大于操作符。

相关文章