python 实现常见排序算法--快速排序

排序算法的复杂度总结表

几种常见排序算法的特点:(图片转载于link
在这里插入图片描述
快速排序时间复杂度为O(nlog2n)

1) 快速排序的实现(Quick Sort)
快速排序的时间复杂度是 O(nlogn),并且它在时间复杂度为 O(nlogn)级的几种排序算法中,大多数情况下效率更高,所以快速排序的应用非常广泛。再加上快速排序所采用的分治思想非常实用,使得快速排序深受面试官的青睐,所以掌握快速排序的思想尤为重要。

快速排序的方法:

1.从数组中取出一个数,称之为基数(pivot)
2.遍历数组,将比基数大的数字放到它的右边,比基数小的数字放到它的左边。遍历完成后,数组被分成了左右两个区域
3.将左右两个区域视为两个数组,重复前两个步骤,直到排序完成

在这里插入图片描述
(图片转载于link

第一轮遍历排好 1 个基数,第二轮遍历排好 2 个基数(每个区域一个基数,但如果某个区域为空,则此轮只能排好一个基数),第三轮遍历排好 4 个基数(同理,最差的情况下,只能排好一个基数),以此类推。总遍历次数为 logn~n 次,每轮遍历的时间复杂度为 O(n),所以很容易分析出快速排序的时间复杂度为 O(nlogn)~ O(n^2) ,平均时间复杂度为 O(nlogn)。

def QuickSort(a:list):
    # 设计一个实现分区的函数
    def partition(arr,left,right):
        cir=left
        while left<right:
            while left < right and arr[right] >= arr[cir]:
                right-=1
            while left < right and arr[left] <= arr[cir]:
                left+=1
            (arr[left],arr[right])=(arr[right],arr[left])
        (arr[left], arr[cir]) = (arr[cir], arr[left])
        index=left
        return index
    # 快排,用到了递归
    def quicksort(arr,left,right):
        if left>=right:
            return 0
        mid=partition(arr,left,right)
        quicksort(arr,left,mid-1)
        quicksort(arr,mid+1,right)
    n=len(a)
    if n<=1:
        return a
    quicksort(a,0,n-1)
    return a
x=list(map(int,input('请输入待排序数列,并以' '隔开:\n').strip().split(' ')))
arr=QuickSort(x)
print('排列结果如下:')
for k in arr:
    print(k,end=' ')


转载请注明:Daniel的博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值