欢迎光临散文网 会员登陆 & 注册

python排序算法-(4)快速排序

2023-06-17 07:33 作者:仿真资料吧  | 我要投稿

快速排序是一种高效的排序算法,它的时间复杂度为 O(nlogn)。快速排序算法的基本思想是:通过一趟排序将待排序数组分成两部分,其中一部分中的所有元素都小于另一部分中的所有元素,然后再分别对两部分进行递归排序,最终即可完成整个数组的排序。

具体来说,快速排序算法的实现过程如下:

1. 首先,从数列中挑出一个元素作为基准元素(通常选取数列的最后一个元素或者随机一个元素作为基准元素);

2. 接着,把数列中所有小于基准元素的元素放在基准元素前面,把所有大于基准元素的元素放在基准元素后面(相等的元素可以放在任意一边)。这个过程称为分区操作(partition);

3. 对左右两个分区分别递归地进行快速排序。

4. 当分区只剩下一个或没有元素时,递归结束。

通过不断进行分区操作和递归调用,快速排序算法可以将未排序的数组或子数组进行排序。由于其时间复杂度优秀,在实际应用中得到广泛的使用。

import random

# 寻找分区位置的函数
def partition(array, low, high):
    # 选择最右边的元素作为枢轴

    pivot = array[high]
    # 若要使用随机枢轴,请取消关注下面3行的注释:
    ######################################################################
    # piv_index=random.randrange(low, high)
    # pivot = array[piv_index]
    # (array[high], array[piv_index]) = (array[piv_index], array[high])
    ######################################################################

    # 指针 i
    i = low - 1
    # 遍历所有元素
    # 将每个元素与枢轴比较

    for j in range(low, high):
        if array[j] <= pivot:
            # 如果寻找到小于枢轴的元素,则将它与索引 i + 1 处的元素交换
            i = i + 1
            # 交换 i 和 j 处的元素
            (array[i], array[j]) = (array[j], array[i])
    # 将枢轴元素与指定索引 i + 1 处的元素交换
    (array[i + 1], array[high]) = (array[high], array[i + 1])
    # 返回枢轴元素的索引位置
    return i + 1

# 快速排序函数
def quickSort(array, low, high):
    if low < high:
        # 调用 partition 函数获取枢轴元素的索引位置
        pi = partition(array, low, high)
        # 对枢轴元素左侧的子数组递归进行排序
        quickSort(array, low, pi - 1)
        # 对枢轴元素右侧的子数组递归进行排序
        quickSort(array, pi + 1, high)

# 测试
array=random.sample(range(0, 100), 50)
print("原始数组为:")
print(array)

size = len(array)
quickSort(array, 0, size-1)

print('快速排序后的数组为:')
print(array)

运行环境:python3.8

原始数组为:

[81, 69, 61, 47, 42, 98, 14, 36, 18, 93, 55, 80, 22, 26, 11, 85, 9, 53, 43, 32, 90, 64, 51, 99, 33, 39, 45, 73, 63, 7, 48, 74, 60, 23, 2, 30, 20, 89, 54, 91, 96, 49, 44, 6, 65, 35, 19, 57, 79, 95]

快速排序后的数组为:

[2, 6, 7, 9, 11, 14, 18, 19, 20, 22, 23, 26, 30, 32, 33, 35, 36, 39, 42, 43, 44, 45, 47, 48, 49, 51, 53, 54, 55, 57, 60, 61, 63, 64, 65, 69, 73, 74, 79, 80, 81, 85, 89, 90, 91, 93, 95, 96, 98, 99]


python排序算法-(4)快速排序的评论 (共 条)

分享到微博请遵守国家法律