欢迎访问宙启技术站
智能推送

在Python中如何使用函数实现快速排序?

发布时间:2023-06-11 19:44:21

快速排序是一种常用的排序算法,其核心思想是将数组按照某个元素为基准值分成两个子数组,然后递归地对子数组进行排序,最终整个数组就有序了。具体实现过程可以使用函数来实现。

函数的定义

首先,我们需要一个函数来实现快速排序,其参数为需要排序的数组和排序的起始位置和终止位置:

def quickSort(arr, start, end):

在这个函数中,我们需要根据基准值将数组分成两个子数组,然后递归地对子数组进行排序。在每一次递归调用中,我们需要更新起始位置和终止位置:

def quickSort(arr, start, end):
    if start < end:
        pivot = partition(arr, start, end)
        quickSort(arr, start, pivot - 1)
        quickSort(arr, pivot + 1, end)

在这个函数中,我们使用 partition 函数来将数组按照基准值分成两个子数组,然后递归地对子数组进行排序。同时,我们需要加上判断条件 start < end,以确保排序可以正常进行。

partition 函数的实现

接下来,我们需要实现 partition 函数来将数组按照基准值分成两个子数组。partition 函数的定义如下:

def partition(arr, start, end):

在 partition 函数中,我们可以选择基准值,然后将数组按照基准值分成两个子数组。具体实现过程可以参考以下代码:

def partition(arr, start, end):
    pivot = arr[start]
    left = start + 1
    right = end
 
    while True:
        while left <= right and arr[left] < pivot:
            left += 1
        while left <= right and arr[right] >= pivot:
            right -= 1
 
        if left <= right:
            arr[left], arr[right] = arr[right], arr[left]
        else:
            break
 
    arr[start], arr[right] = arr[right], arr[start]
 
    return right

在这个函数中,我们选择数组中的第一个元素作为基准值,然后使用双指针来将数组分成两个子数组。具体过程如下:

1. 初始化左右指针 left 和 right,分别指向数组的第一个元素和最后一个元素;

2. 从左向右找到第一个大于等于基准值的元素;

3. 从右向左找到第一个小于基准值的元素;

4. 如果 left <= right,交换 arr[left] 和 arr[right];

5. 重复步骤 2~4,直到 left > right;

6. 交换 arr[start] 和 arr[right],将基准值移到正确的位置。

在 partition 函数中,我们使用 while 循环来找到符合要求的左右指针位置,目的是将 left 和 right 指向需要交换的元素。当 left <= right 时,我们将 arr[left] 和 arr[right] 交换,将较小的元素交换到左侧,较大的元素交换到右侧。当 left > right 时,我们将基准值移到正确的位置,同时返回基准值的位置。

完整代码

最终,我们可以将 quickSort 和 partition 函数组合起来,实现快速排序算法。完整代码如下:

def quickSort(arr, start, end):
    if start < end:
        pivot = partition(arr, start, end)
        quickSort(arr, start, pivot - 1)
        quickSort(arr, pivot + 1, end)
 
def partition(arr, start, end):
    pivot = arr[start]
    left = start + 1
    right = end
 
    while True:
        while left <= right and arr[left] < pivot:
            left += 1
        while left <= right and arr[right] >= pivot:
            right -= 1
 
        if left <= right:
            arr[left], arr[right] = arr[right], arr[left]
        else:
            break
 
    arr[start], arr[right] = arr[right], arr[start]
 
    return right
 
# 测试
if __name__ == '__main__':
    arr = [3, 2, 1, 6, 5, 4]
    quickSort(arr, 0, len(arr) - 1)
    print(arr)

在测试中,我们首先创建一个数组 arr,然后使用 quickSort 函数对其进行排序。最终,输出排序后的结果。