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))