https://leetcode-cn.com/submissions/detail/24096646/
class Solution(object):
def sortArray(self, nums):
# ------------------------------------------------------------------------
# Merge時間複雜度:O(len(left)+len(right))=O(n)
def merge(left,right): # Merge空間複雜度:O(len(left)+len(right))=O(n)
i, j = 0, 0
result=[]
while i<len(left) and j<len(right): # 都存在
if left[i] <= right[j]:
result.append(left[i])
i += 1
else:
result.append(right[j])
j += 1
if i < len(left): # left數組存在
result += left[i:]
if j < len(right): # right數組存在
result += right[j:]
return result
def mergeSort(data): # mergeSort時間複雜度:O(nlogn)
if len(data) <= 1: return data
num = len(data)//2
left = mergeSort(data[:num])
right = mergeSort(data[num:])
return merge(left, right) # 合併兩個有序表
# ------------------------------------------------------------------------
return mergeSort(nums)
排序類別 |
排序方法 |
時間複雜度 |
空間複雜度 |
穩定性 |
複雜性 |
||
平均情況 |
最壞情況 |
最好情況 |
|||||
歸併排序 |
歸併排序 |
O(nlog2n) |
O(nlog2n) |
O(nlog2n) |
O(n) |
穩定 |
較複雜 |