排序算法

冒泡排序

def sort(alist):
    for i in range(len(alist)-1):
        for j in range(len(alist)-1-i):
            if alist[j] > alist[j+1]:
                alist[j], alist[j+1] = alist[j+1], alist[j]
    return alist

平均时间复杂度O(n^2)
最坏时间复杂度O(n^2)
空间复杂度O(1)

选择排序

def sort(alist):
    for i in range(len(alist)-1):
        max = 0
        for j in range(1,len(alist)-i):
            if alist[j] > alist[max]:
               max = j
        alist[len(alist)-1-i],alist[max] = alist[max],alist[len(alist)-1-i]
    return alist

平均时间复杂度O(n^2)
最坏时间复杂度O(n^2)
空间复杂度O(1)

插入排序

def sort(alist):
    for i in range(1,len(alist)):
        while i > 0 :
            if alist[i-1] > alist[i]:
                alist[i-1], alist[i] = alist[i], alist[i-1]
                i -= 1
            else:
            	break
    return alist

平均时间复杂度O(n^2)
最坏时间复杂度O(n^2)
空间复杂度O(1)

快速排序

def sort(alist, start, end):
    low = start
    high = end
    if low > high:
        return
    #基数
    mid = alist[low]
    while low < high:
        while low < high:
            # 向左偏移high
            if alist[high] > mid:
                high -= 1
            else:
                alist[low] = alist[high]
                break
        while low < high:
            #向右偏移low
            if alist[low] < mid:
                low += 1
            else:
                alist[high] = alist[low]
                break
        if low == high:
            alist[low] = mid
            break
    #作用到左侧
    sort(alist, start, high-1)
    #作用到右侧
    sort(alist, low+1, end)
    return alist
    

平均时间复杂度O(nlogn)
最坏时间复杂度O(n^2)
空间复杂度O(logn)

posted @ 2020-09-01 20:45  guguda  阅读(91)  评论(0)    收藏  举报