912. Sort an Array

https://leetcode.com/problems/sort-an-array/

solution

  • 插入排序: 算法导论中的扑克牌插入,相邻比较

class Solution:
    def sortArray(self, nums: List[int]) -> List[int]:
        if len(nums) <= 1:
            return nums

        for i in range(1, len(nums)):
            j = i
            while j > 0 and nums[j] < nums[j-1]:  # 倒序
                nums[j-1], nums[j] = nums[j], nums[j-1]
                j -= 1
        return nums

时间复杂度:O(n^2) 空间复杂度:O(n)

递归写法

def insert_sort_rec(list, m):
    if m == 0:
        return
    mmax = m
    for i in range(m):
        if list[i] > list[mmax]:
            mmax = i
    list[m], list[mmax] = list[mmax], list[m]
    insert_sort_rec(list, m - 1)
  • 冒泡排序: 两层for循环,相邻比较

时间复杂度:O(n^2) 空间复杂度:O(n)

  • 归并排序

    • 树的后序遍历

    • divide & conquer: top down & bottom up

    • 排序的稳定性问题

时间复杂度:O(nlog(n)) 空间复杂度:O(n)

  • 快速排序

    • 树的前序遍历

    • average O(nlog(n)) 最好O(1) 最差O(n^2)

    • 注意左闭右开/左闭右闭的统一

时间复杂度:average O(nlog(n)) 最好O(1) 最差O(n^2) 空间复杂度:O(n)

  • 堆排序

时间复杂度:O(nlog(n)) 空间复杂度:O(n)

  • 桶排序

    • 为每个值设立一个桶,桶内记录这个值出现的次数或其它属性,然后对桶进行排序

时间复杂度:O() 空间复杂度:O()

  • 计数排序

follow up

148. Sort List

75. Sort Colors

791. Custom Sort String

147. Insertion Sort List

386. Lexicographical Numbers

Last updated