python的快速排序
一、定义
快速排序原理:从一个数组中任意挑选一个元素(通常为最左边的元素)作为基准数,
将剩下的元素和基准数进行比较,将小于等于中轴元素的放到基准数的左边,经大于
中轴元素的放到基准数的右边,然后以当前基准数的位置为界,将左半部分数组和右
半部分数组堪称两个新的数组,重复上述操作,直到子数组的元素个数小于等于1.
二、推理
选一个作为分界的位置,选一个划分的位置,设定排序条件。本文选择最右边作为分界值,最左边最为划分的位置,从左边第一个元素开始一直到倒数第二个为止,逐一和分界值进行比较,大于分界值的数字不做任何修改,小于分界值的元素与划分的位置交换,划分位置后移移位,直到全部比完,第一轮结束,一直到左、右部分的数组内个数小于等于1时,快速排序完成。
三、代码
lista = [1,5,8,34,19,20,33,11] #定义排序的序列
def quikSwith(listArr,left,right): #定义比较与交换的函数
'''
@参数:listArr是需要排序的列表
left是起始位置
right是结束位置
'''
div = listArr[right] #分界值,默认取最后一个元素,用来划分使用
position = left #记录划分的位置
for i in range(left,right): #用列表中的其他元素与分界值比较
if listArr[i] > div: #大于分界值,不作任何操作
#position不变
pass
else:
listArr[i],listArr[position]=listArr[position],listArr[i] #小于分界值时,交换划分位置和元素的位置
position += 1 #划分位置向后移一位
pass
print(lista) #检验过程
pass
listArr[position],listArr[right]=listArr[right],listArr[position] #退出循环后分界值与划分位置交换
print(lista)
return position #返回记录的位置
pass
def quikSort(listArr,left,right): #定义递归函数,调用比较与交换的函数和函数自己本身。
if left >= right: #退出条件
return None
position = quikSwith(listArr,left,right) #继续划分,直到只有一个数或没有数
quikSort(listArr,left,position - 1) #前半部分
quikSort(listArr,position + 1,right) #后半部分
pass
print(quikSort(lista,0,len(lista)-1)) #调用函数
print(lista) #输出结果
四、总结
快速排序有很多种方式,只要理清逻辑,就成功了一大半,还可以试试从左边开始排序或者从一个随机数开始排序。
以上内容仅供参考,切勿用于商业用途,定义内容来自万能的百度百科,其余如有雷同,纯属偶然!