Python 实现快速排序

def quick_sort(arr,low,high):
    ''' 指针交换法实现快速排序
    :param arr: 所排序的数组
    :param low: 左起第一位数的位置
    :param high: 左起最后一位数的位置
    '''
    if low >= high:
        return
    pivot = arr[low]  # 基准数,这里选择左起第一位数
    j = high  # 哨兵j,从右往左找小于基准数的数
    i = low  #哨兵i,从左往右找大于基准数的数

    while i != j:  #当哨兵i 和哨兵j 木有相遇
        while arr[j] >= pivot and i < j: 
        #因为选取最左边为基准点,所以哨兵j 先动,
        #否则可能会出现和基准点交换值不准确的情况
            j -= 1
        while arr[i] <= pivot and i < j:
            i += 1
        if i < j:
            arr[i], arr[j] = arr[j], arr[i]
    if i == j:	#当哨兵i 和哨兵j 相遇,和基准点交换值
        arr[low],arr[j] = arr[j],arr[low]
    quick_sort(arr,low,j-1)
    quick_sort(arr,i+1,high)

arr=[6,1,2,7,9,3,4,5,10,8]
quick_sort(arr,0,9)
print(arr)

快速排序

快速排序使用分而治之的思想。每一轮确定一个数(基准点)的排序位置,与此同时,将比基准点小的数移到基准点左边,比基准点大的数移到右边。
平均时间复杂度为 O(NlogN)。每轮遍历N次,共 logN 轮。
最坏时间复杂度为 O(N^2)

参考链接

1.《啊哈!算法》第一章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值