快速排序(经典&优化)

标题话不多说,直接上代码

经典快速排序


Class solution:
		
def QuickSort(array, start, end):
    if start < end:
        index = Partition(array, start, end)
        QuickSort(array, start, index-1)
        QuickSort(array, index+1, end)
 
def Partition(array, start, end):
    print(start, end)
    small = start-1
    base = array[end]
    for i in range(start, end):
        if array[i] < base:
            small += 1
            if small != i:
                array[small], array[i] = array[i], array[small]
    small+=1
    array[small], array[end] = array[end], array[small]
    return small

随机快速排序

import random, math

def quick_sort(arr, l, r, num):
    if l < r: 
        # 随机选取l到r之间的数,与最后一个位置上的数进行交换
        random_pos = l + int(math.floor(random.random() * (r - l + 1)))  
        arr[r],arr[random_pos] = arr[random_pos],arr[r]
        less, more = partition(arr, l, r, num)
        quick_sort(arr, l, less, arr[less])
        quick_sort(arr, more, r, arr[r])
    return arr


def partition(arr, l, r, num):
    less = l - 1
    more = r + 1
    cur = less + 1
    while cur < more:
        if arr[cur] < num:
            arr[less + 1], arr[cur] = arr[cur], arr[less + 1]
            less += 1
            cur += 1
        elif arr[cur] > num:
            arr[more - 1], arr[cur] = arr[cur], arr[more - 1]
            more -= 1
        else:
            cur += 1
    return less, more

随机快速排序利用了荷兰国旗的思想,能将小于主元的全部放在左边,大于主元的全部放在右边,而等于主元的放在中间

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值