python实现快速排序算法

参考资料

https://www.bilibili.com/video/BV1pf4y1o7RA/?spm_id_from=333.337.search-card.all.click&vd_source=3f409e335d99edd58fc22f4c59f6ae9e

代码实现

"""快速排序python实现"""


# 让元素归位
def partition(input_list, start, end):
    # 取列表中第一个当对照项
    tmp = input_list[start]
    while start < end:
        """不断重复以下操作,直到start和end索引重叠时跳出循环"""
        # 从右边开始找,直到找到比对照项小的元素,然后放到左边的start索引位置
        while input_list[end] >= tmp and start < end:
            end = end - 1  # 向左找
        # 将右边的值放到左边
        input_list[start] = input_list[end]
        print(f"排序中的列表input_list:{input_list}")

        # 从左边开始找,直到找到比对照项大的元素,然后放在右边的end索引位置
        while input_list[start] <= tmp and start < end:
            start = start + 1  # 向右找
        # 将左边的值放到右边
        input_list[end] = input_list[start]
        print(f"排序中的列表input_list:{input_list}")

    # 上面循环结束,位置就已经找到了
    input_list[start] = tmp
    print(f"排序归位1次的列表input_list:{input_list}")
    return start


def quick_sort(input_list, start, end):
    global recursion_time
    recursion_time = recursion_time + 1
    print(f"recursion_time:{recursion_time}")
    if start < end:
        # 归位
        mid = partition(input_list, start, end)
        # 左边
        quick_sort(input_list, start, mid - 1)
        # 右边
        quick_sort(input_list, mid + 1, end)


recursion_time = 0  # 递归次数
input_list = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
print(f"排序前的列表input_list:{input_list}")
quick_sort(input_list=input_list, start=0, end=len(input_list) - 1)
print(f"排序后的列表input_list:{input_list}")

image

posted @ 2022-11-20 18:30  JaxonYe  阅读(21)  评论(0编辑  收藏  举报