分治法——快速排序 (python解答)

算法设计与分析

分治法

快速排序

快速排序动画演示
在这里插入图片描述

实现代码:

def quicksort(arr,left = None,right = None):   #快速排序  arr-数列,lerf-数列最左元素下标,right-数列最右元素下标
    left = 0 if not isinstance(left,int) else left   #左下标以整数形式显示
    right = len(arr)-1 if not isinstance(right,int) else right  #右下标以整数形式显示
    if left < right:  #判断左下标小于右下标
        p = partition(arr,left,right)   #返回分裂位置
        quicksort(arr,left,p-1)    #继续分裂直至左下标大于或等于右下标
        quicksort(arr,p+1,right)

def swap(arr,i,j):  #数列中两个元素置换
    arr[i],arr[j] = arr[j],arr[i]

def partition(arr,left,right):    #分裂函数
    pivot = left
    index = pivot + 1
    i = index
    while i <= right:  #进行划分
        if arr[i] < arr[pivot]:
            swap(arr, i, index)  #如果i元素小于左元素,进行元素位置互换
            index += 1
        i += 1
    swap(arr, pivot, index - 1)     #该次划分最后一次交换
    return index - 1

def main():
    arr = []
    line = input().split(" ")  # 输入排序数列
    for x in range(len(line)):
        arr.append(int(line[x]))
    right = len(arr)
    quicksort(arr,0,right - 1)   #进行快速排序
    print(arr)          #输出排序好的数列

if __name__=='__main__':
    main()

输入
9 8 4 56 1 2 3 5 44 88 12
输出
[1, 2, 3, 4, 5, 8, 9, 12, 44, 56, 88]

上一篇文章———>分治算法——归并排序

下一篇文章———>《Python之format用法详解》

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全 洛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值