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
Last updated