• Python实现快速排序方法讲解


    快排思想

    选取一个元素作为基准值(一般是选中数组中的第一个元素),将大于该基准值的元素放在数组的右边,小于基准值的元素放在数组的左边,此时完成一次排序,多次按照既定规则循环后完成排序。

    详细讲解

    1. 优先设置两个变量i和j,设置元素位置i=0,j=len(array)-1;
    2. 选取第一个元素作为基准值,即:base = array[i];
    3. j向左开始移动,每次移动一个元素,即j-=1,直到该元素小于基准值时停下,此时将该值赋值给array[i],即:array[i] = array[j];
    4. i向右开始移动,每次移动一个元素,即i+=1,直到该元素大于基准值时停下,此时将该值赋值给array[j],即:array[j] = array[i];
    5. 重复执行3/4两个步骤,直到i=j时停下,此时即找到了基准值的位置,即:array[i] = base,目前也就完成了一次排序;
    6. 通过第一轮排序后得出前后两个半区,则继续递归执行前后两半区实现最终排序。

    代码示例

    def QuickSort(myList, start, end):
        # 判断start是否小于end,如果为false,直接返回
        if start < end:
            i, j = start, end
            # 设置基准数
            base = myList[i]

            while i < j:
                # 如果列表后边的数比基准数大或相等,则前移一位直到有比基准数小的数
                while (i < j) and (myList[j] >= base):
                    j = j - 1

                # 如找到,则把第j个元素赋值给第i个元素
                myList[i] = myList[j]

                # 同样的方式比较前半区
                while (i < j) and (myList[i] <= base):
                    i = i + 1
                myList[j] = myList[i]
            # 做完第一轮比较之后,列表被分成了两个半区,并且i=j,此时找到基准值
            myList[i] = base

            # 递归前后半区
            # print(base, myList)
            QuickSort(myList, start, i - 1)
            QuickSort(myList, j + 1, end)
        return myList


    myList = [7, 6, 5, 3, 12, 20, 1, 9, 11, 4, 15, 10, 8]
    print("myList:",QuickSort(myList, 0, len(myList) - 1))

    运行结果:myList: [1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15, 20]
  • 相关阅读:
    [剑指Offer] 10.矩形覆盖
    [剑指Offer] 9.变态跳台阶
    [剑指Offer] 8.跳台阶
    [剑指Offer] 7.斐波那契数列
    ArtifactTransferException: Failure to transfer org.apache.openejb:javaee-api:jar:5.0-1
    -Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HO 解决办法
    java中判断list是否为空的用法
    PL/SQL快速选中一行并执行
    substring的用法
    Oracle---------sql 中取值两列中值最大的一列
  • 原文地址:https://www.cnblogs.com/ddpeng/p/11309690.html
Copyright © 2020-2023  润新知