八大排序之快排

一 原理:

取数组里第一个数为参照数,分为左右两个数组。left 是存放小于等于参照数的元素,

right存放大于参照数的元素。分别递归操作左右数组,直到左右数组长度为1。

分析:

对于a=[3,4,1,5]

quick_sort([1])+[3]+quick_sort([4,5])

[1]+[3]+[4]+quick_sort([5])

[1]+[3]+[4]=[5]

 

二 代码实现

a=[0,-9,-6,9,5,3,2]

 

def quick_sort(arr):

    if len(arr)<=1:

        return arr

    temp=arr[0]

    left=[i for i in arr[1:] if i<=temp]

    right=[i for i in arr[1:] if i>temp]

    print("left数组",left)

    print("right数组",right)

    print("*"*50)

    return quick_sort(left)+[temp]+quick_sort(right)

 

print(quick_sort(a))

三 时间复杂度和稳定性

O(nlogn) 这个复杂度有待再研究一下。

无法保证相同元素的相对位置不发生改变,因此是不稳定的。

posted @ 2020-03-09 14:08  とうさん  阅读(105)  评论(0编辑  收藏  举报