常用排序算法總結(python)

參考:https://wiki.jikexueyuan.com/project/easy-learn-algorithm/xiaohen-buy-book.html

常用的排序算法有:

  1. 桶排序
  2. 冒泡排序
  3. 快速排序
  4. 堆排序

1、桶排序:好多桶。時間複雜度爲O(m+n),空間複雜度爲O(max(nums)+1)

#打印出得分[5, 3, 2, 5, 8]
#10爲總分數
#堆排序
def backet_sort(nums):#時間複雜度O(m+n)
    res = []
    size = len(nums)
    if size < 2:
        return nums
    backet = [0 for _ in range(10+1)]

    for n in nums:
        backet[n] += 1
    #從小到大
    # for i in range(10+1):
    #從大到小
    for i in range(10, -1, -1):
        l = backet[i]
        for j in range(l):
            res.append(i)
    return res
# print(backet_sort([5, 3, 2, 5, 8]))

2、冒泡排序:有點像排大合照站隊形;時間複雜度O(n2),空間複雜度O(1)

#冒泡排序
def bulling_sort(nums):
    size = len(nums)
    if size < 2:
        return nums
    for i in range(size-1):#第i次排位
        p = 0
        for j in range(1, size):#比較j次
            if nums[p] < nums[j]:
                tmp = nums[p]
                nums[p] = nums[j]
                nums[j] = tmp
            p += 1
    return nums
# print(bulling_sort([35, 12, 99, 18, 76]))

3、快排:找基準值,兩個左右兩個指針相遇;時間複雜度O(nlogn),空間複雜度爲O(1).

#快排
def quick_sort(nums):
    size = len(nums)
    if size < 2:
        return nums
    pivot = nums[0]
    i = 0
    j = size - 1
    while i < j:
        if nums[j] > pivot:
            j -= 1
        else:
            if nums[i] > pivot:
                tmp = nums[i]
                nums[i] = nums[j]
                nums[j] = tmp
            else:
                i += 1
    tmp = nums[i]
    nums[i] = pivot
    nums[0] = tmp
    return quick_sort(nums[:i]) + [pivot] + quick_sort(nums[i+1:])
print(quick_sort([6, 1, 2, 7, 3, 4, 5, 10, 8]))

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章