Python学习打卡--day40(算法练习:快速排序)

方法一:

参考资料:https://baijiahao.baidu.com/s?id=1617821935743300963&wfr=spider&for=pc

def quicksort(array):
    # 基线条件:为空或只包含一个元素的数组是“有序”的
    if len(array) < 2:
        return array
    else:
        # 递归条件
        pivot = array[0]
        # 所有小于基准值组成的子数组
        less = [i for i in array[1:] if i <= pivot]
        greater = [i for i in array[1:] if i > pivot]
        # 所有大于基准值组成的子数组
        # print((quicksort(less) + [pivot] + quicksort(greater)))
        return quicksort(less) + [pivot] + quicksort(greater)


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

方法二

复杂一点,不是特别懂

"""
快速排序:
1-挑挑选基准值:从数列中挑出一个元素,称为"基准"(pivot);
2-分割:重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(
3-递归排序子序列:
"""


def partition(arr, low, high):
    # arr[] --> 排序数组
    # low  --> 起始索引
    # high  --> 结束索引
    i = (low - 1)
    pivot = arr[high]  # 将列表最后一个元素作为基准值
    for j in range(low, high):  # 遍历列表中除了基准值以外的所有元素
        # 当前元素小于或等于 pivot
        if arr[j] <= pivot:
            i = i + 1
            arr[i], arr[j] = arr[j], arr[i]
    arr[i + 1], arr[high] = arr[high], arr[i + 1]
    return (i + 1)  # 基准值的索引


# 快速排序函数
def quickSort(arr, low, high):
    if low < high:
        pi = partition(arr, low, high)  # 基准值的索引
        # print(pi)
        quickSort(arr, low, pi - 1)
        quickSort(arr, pi + 1, high)


arr = [6, 3, 2, 7, 9, 1, 4, 5, 10, 8]
n = len(arr)
quickSort(arr, 0, n - 1)
print("排序后的数组:", arr)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值