歸併排序

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)

穩定

較複雜

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