快速排序

思想:

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

详细讲解

  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]; 重复执行3/4两个步骤,直到i=j时停下,此时即找到了基准值的位置,即:array[i] =base,目前也就完成了一次排序;
  5. 通过第一轮排序后得出前后两个半区,则继续递归执行前后两半区实现最终排序。

代码实现

__author__ = "Hao Rui Chun"


def QuickSort(myList, start, end):
    # 判断start是否小于end,如果为false,直接返回
    if start < end:
        i, j = start, end    #下表为0的元素开始,列表长度-1为结束
        # 设置基准数
        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))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值