python常考算法之快排排序

基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列

一趟快速排序的算法是:

1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;

2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];

3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]互换;

4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;

5)重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。找到符合条件的值,进行交换的时候i, j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)

# 定义一个函数将获取到的数组进行快排排序
def quick_sort(lists,left,right):#为排序的列表,左侧索引值,右侧索引值
    #判断数组的大小,如果为空或者长度小于2直接返回
    if lists == [] and lenth(lists)<2:
        return
    #递归过程中,若发现left>=right时,说明数组索引越界,排序完毕,返回数组
    if left>=right:
        return lists
    #定义游标,相当于是C语言中的指针,不断地与key比较,来判断对应索引的值应该放在那
    low = left
    high = right
    #参考值,用于比较,一般取最左边的元素
    key = lists[low]

    #当左侧索引值小于右侧索引值,才能进行排序
    while low<high:
        #当左侧索引值小于右侧索引值且右侧的元素要大于参考值时,才能进行排序
        while low<high and lists[high]>key:
            #右侧索引值自减
            high -= 1
        #否则将右侧元素赋值到左边
        lists[low] = lists[high]

        # 当左侧索引值小于右侧索引值且左侧的元素要小于参考值时,才能进行排序
        while low<high and lists[low]<key:
            # 左侧索引值自加
            low += 1
        # 否则将左侧元素赋值到右边
        lists[high] = lists[low]
    #否则将参考值赋值给high对应的值
    lists[high] = key
    #递归处理左侧元素
    quick_sort(lists,left,low-1)
    # 递归处理右侧元素
    quick_sort(lists,low+1,right)
    #返回排序好的数组
    return lists

#定义一个数组
alists = [0,10,89,74,2,42,6]
#输出进行快排后的数组
print(quick_sort(alists,0,6))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值