数据结构之排序六:快速排序

简单选择排序的改进:快速排序

def QuickSort(myList,start,end):
    # 判断low是否小于high,如果为false,直接返回
    if start < end:
        i,j = start,end
        # 设置基准数
        base = myList[i]

        while i < j:
            # 如果列表后边的数,比基准数大或相等,则前移一位直到有比基准数小的数出现
            while (i < j) and (myList[j] >= base):
                j = j - 1

            # 如找到,则把第j个元素赋值给第个元素i,此时表中i,j个元素相等
            myList[i] = myList[j]

            # 同样的方式比较前半区
            while (i < j) and (myList[i] <= base):
                i = i + 1
            myList[j] = myList[i]
        # 做完第一轮比较之后,列表被分成了两个半区,并且i=j,需要将这个数设置回base
        myList[i] = base

        # 递归前后半区
        QuickSort(myList, start, i - 1)
        QuickSort(myList, j + 1, end)
    return myList

时间复杂度::

  平均:O(nlog(n))

  最坏:O(n^2)  # 有序

  最好:O(nlog(n))

空间复杂度:O(log(n)) ,最坏的情况O(n)

稳定性:不稳定(选择排序都是不稳定的)

posted @ 2019-08-12 16:53  青牛梦旅行  阅读(142)  评论(0编辑  收藏  举报