python 算法学习笔记(快速排序)

python 算法学习笔记(快速排序)

一、快速排序是常用基本算法之一,使用的是分治思想,一共分两步实现;

步骤 1、算法实现是在要排序的数据中随机选取一个值为基准值(对比对象),将数据中每一个元素都与基准值对比,比基准值小的移动到基准值前面,也就是基准值所在数据位置的左边,比基准值大的放基准值后面,也就是基准值所在数据位置的右边,这里有个问题,数据里面可能有重复元素,这样会导致有和基准值相等的元素出现,这些元素的位置可以统一放基准值左边,或者右边;

步骤 2、循环步骤1,知道排序完成;

二、接下来就是代码部分了:
步骤1、首先要处理要排序的数据里面就一个元素或者没有元素的情况,比如:

sun=[12]
sum=[]

这里要排序的数据就一个元素,也就不需要再排序了;
这样可以写一个 if 语句判断,代码如下:

def k(i):
    if len(i)<=1:
        return i

定义一个函数,接收一个参数(需要排序的数据),判断数据里面元素个数是否为1或0,是就直接返回;

步骤2、处理多个元素的情况,代码如下:

sum=[9,3,6,15,7]
a=sum[0]
small=[q for q in sum[1:]if q <=a]
big=[p for p in sum[1:]if p >a]

在需要排序的数据里面选择一个基准值,将数据里面所有元素都与基准值比较,把小于或等于基准值的元素放到列表small里面,大于基准值的元素放到列表big里面,完了之后,可以打印看一下:

print(small) 
print(a) 
print(big)

步骤3、将返回的两个列表small、big 与基准值a 组合成新的列表 (新的列表以基准为分割,基准值前面的都是小于或者等于基准值的元素,后面的都是大于基准值的元素)代替步骤2里面的sum 循环步骤2,直到排序完成;

新列表: small + [sum] + big
注意一点: 拼接使用 ‘ + ’号的时候需要 ‘ + ’号两边的元素类型必须相同,否则会报错;

这里数据是使用随机数模块直接生成的一个有10个大小范围在1~100之间的元素的列表,然后进行排序,最后返回的就是已经排序好了的列表。

全部代码如下:

import random

def list():
    p = []
    for i in range(10):
        i=random.randint(1,100)
        p.append(i)
    return p

def k(i):
    if len(i)<=1:
        return i
    else:
        sum=i[0]
        small=[q for q in i[1:]if q <=sum]
        big=[p for p in i[1:]if p >sum]
    return k(small) + [sum] + k(big)

i=list()
print(k(i))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值