数据结构与算法--Python实现之快速排序(Quick Sort)

快速排序(Quick Sort)

首先,选择列表中的第一个元素作为主元,然后选择两个指针。leftmark 选择主元后一个位置的元素,rightmark选择列表中最后一个元素。leftmark向右移动,当遇到比主元大的元素时停止;同时,rightmark向左移动,当遇到比主元小的元素时停止。如果此时 leftmark < rightmark,说明中间还有元素未处理,交换 leftmark 和 rightmark的位置,重复刚才的移动,直到 leftmark > rightmark。此时的rightmark就是主元最后在排好序的列表中要存放的位置,因为它停在一个比主元小的元素的位置上。此时交换主元和 rightmark位置上的元素即可。找到主元后,对主元左右的数组实行相同的操作。

 

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):
    pivotvalue = alist[first]

    leftmark = first + 1 #指定 leftmark的值
    rightmark = last # 指定rightmark的值

    done = False:
    while not done:
        # 满足条件后,leftmark右移一个位置
        while leftmark <= rightmark and alist[leftmark] <= pivotvalue:
            leftmark = leftmark + 1
        
        # 满足条件后,rightmark左移一个位置
        while leftmark <= rightmark and alist[rightmark] >= pivotvalue:
            rightmark = rightmark + 1

        if rightmark < leftmark: # 循环结束
            done
        else: #循环没有结束,交换 leftmark 和 rightmark处的元素
            alist[leftmark],alist[rightmark] = alist[rightmark],alist[leftmark]

    alist[first],alist[rightmark] = alist[rightmark],alist[first] # 找到了主元的位置

    return rightmark

Reference:

http://interactivepython.org/courselib/static/pythonds/SortSearch/TheQuickSort.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值