python实现快速排序(数据结构笔记)

快速排序;
该方法的基本思想是:
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。

实际操作步骤:
1、
指定列表A中的一个数作为一个基准,这里取第一个数。

2、
创建两个指针和一个中间变量,第一个指针指向序列的开头作为low第二个指针指向末尾作为high,中间变量用来存放第一步从列表中取出的基准

3、
先从后往前逐一判断再从前往后判断:

从后往前:
如果 A[high] 比基准middle还要小,则将这个值放入最前方的位置,也就是
A[low] = A[high]
否则,让high减1再判断A[high -1]和middle的关系,直到找到一个值符合条件。

此时,A[low]原来的值在middle中

从前往后:
如果 A[low] 比基准middle还要大,则将这个值放入最后方的位置,也就是
A[high] = A[low]
否则,让low加1再判断A[low +1]和middle的关系,直到找到一个值符合条件。

此时,A[high]中的值已经放在一个A[low]中,因此无需设置中间变量。

4、
一轮结束后,会空出来一个A[low],将middle放回到最后一个A[low]中,列表中的元素不变,但是进行了一个小值向左,大值向右的移动。

5、
以low为断点,将左边的子序列重新执行1 ~ 4操作,右边的子序列执行一次1 ~ 4操作。
6、
子序列又会产生新的子序列,重复这样的操作,直到low和high相等(重合)也就是子序列为1的情况,停止。最后序列就会变成排好序的序列了

def quciksort(lyst,first = 0, last = None):
    if last is None:
        last = len(lyst) -1
    if first >= last:
        return
    middle = lyst[first]
    low = first
    high = last
    while low < high:
        while low < high and lyst[high] >= middle:
            # print("1:", high)
            high -= 1
        lyst[low] = lyst[high]
        # print("1:",high,lyst)
        while high > low and lyst[low] < middle:
            low += 1
        lyst[high] = lyst[low]
        # print("  ",low,lyst)
        lyst[low] = middle
        # print("  ",middle,lyst)
        quciksort(lyst,first ,low -1)
        quciksort(lyst,low + 1,last)
    return lyst

import random
def main(size = 10):
    lyst = []
    for count in range(size):
        lyst.append(random.randint(1,size+1))
    print(lyst)
    quciksort(lyst)
    print(lyst)

if __name__ == "__main__":
    main()

结果:

[9, 10, 7, 10, 5, 2, 7, 4, 9, 5]
[2, 4, 5, 5, 7, 7, 9, 9, 10, 10]

上面的为随机生成的序列,下面的为排过序的序列。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值