快速排序—Python实现

快速排序

快速排序的思路是依据一个中值数据项来把数据表分为两半:小于中值的一半和大于中值的一半,然后每部分分别进行快速排序

基本结束条件:数据表仅有一个数据项,自然是排好序的。

缩小规模:根据中值,将数据表分为两半,最好情况是相等规模的两半

调用自身:将两半分别调用自身进行排序


分裂数据表的目标:找到“中值”应处的位置


分裂数据表的手段:

①设置左右标,左标向右移动,右标向左移动,

②左标一直向右移动,碰到比中值大的就停止,右标一直向左移动,碰到比中值小的就停止,然后把左右标所指的数据项交换

③继续前述的移动过程,直到左标移到右标的右侧,停止移动,这时右标所指的位置就是中值应处的位置,将中值和这个位置交换,分裂完成,左半部全比中值小,右半部都比中值大。


代码

def quickSort(alist):
    quickSortHelper(alist,0,len(alist)-1)
def quickSortHelper(alist,first,last):
    #基本结束条件
    if first<last:
        #分裂为两部分
        splitpoint=partition(alist,first,last)
        #递归调用
        quickSortHelper(alist,first,splitpoint-1)
        quickSortHelper(alist,splitpoint+1,last)
def partition(alist,first,last):
    #选定中值
    mid=alist[first]
    leftmark=first+1
    rightmark=last
    done=False
    while not done:
        while leftmark<=rightmark and alist[leftmark]<=mid:
            leftmark=leftmark+1
        while rightmark>=leftmark and alist[rightmark]>=mid:
            rightmark-=1
        #两标相错就结束移动
        if rightmark<leftmark:  
            done=True
        #左右两标指向的值交换,继续移动
        else:
            temp=alist[leftmark]
            alist[leftmark]=alist[rightmark]
            alist[rightmark]=temp
            
    temp2=alist[first]
    alist[first]=alist[rightmark]
    alist[rightmark]=temp2
    return rightmark
    
alist=[52,312,54,7,3,2]
quickSort(alist)
print(alist)

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值