中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

堆排序的遞歸與非遞歸實現

c++
小樊
81
2024-08-06 21:00:20
欄目: 編程語言

堆排序(Heap Sort)是一種利用堆的數據結構進行排序的算法。它可以分為遞歸和非遞歸兩種實現方式。

下面分別給出堆排序的遞歸和非遞歸實現代碼:

遞歸實現

def heapify(arr, n, i):
    largest = i
    left = 2*i + 1
    right = 2*i + 2

    if left < n and arr[i] < arr[left]:
        largest = left
        
    if right < n and arr[largest] < arr[right]:
        largest = right

    if largest != i:
        arr[i], arr[largest] = arr[largest], arr[i]
        heapify(arr, n, largest)
        
def heap_sort(arr):
    n = len(arr)

    for i in range(n//2 - 1, -1, -1):
        heapify(arr, n, i)

    for i in range(n-1, 0, -1):
        arr[i], arr[0] = arr[0], arr[i]
        heapify(arr, i, 0)
        
    return arr

arr = [12, 11, 13, 5, 6, 7]
print("Sorted array is:", heap_sort(arr))

非遞歸實現

def heapify(arr, n, i):
    largest = i
    left = 2*i + 1
    right = 2*i + 2

    while True:
        if left < n and arr[i] < arr[left]:
            largest = left
        if right < n and arr[largest] < arr[right]:
            largest = right
        if largest == i:
            break
        arr[i], arr[largest] = arr[largest], arr[i]
        i = largest
        left = 2*i + 1
        right = 2*i + 2

def heap_sort(arr):
    n = len(arr)

    for i in range(n//2 - 1, -1, -1):
        heapify(arr, n, i)

    for i in range(n-1, 0, -1):
        arr[i], arr[0] = arr[0], arr[i]
        heapify(arr, i, 0)
        
    return arr

arr = [12, 11, 13, 5, 6, 7]
print("Sorted array is:", heap_sort(arr))

以上代碼分別給出了堆排序的遞歸和非遞歸實現方式。堆排序的時間復雜度為O(nlogn),空間復雜度為O(1)。

0
兴隆县| 镇安县| 奉新县| 休宁县| 海阳市| 西丰县| 军事| 普洱| 博乐市| 大庆市| 兴仁县| 隆回县| 阿图什市| 阳江市| 嘉兴市| 南雄市| 西华县| 淮安市| 铁岭县| 廊坊市| 苍南县| 浮山县| 韶山市| 民和| 三亚市| 克东县| 沽源县| 西青区| 白水县| 临洮县| 恩施市| 宝应县| 民勤县| 京山县| 星座| 新乡县| 朝阳县| 易门县| 新兴县| 当雄县| 洪雅县|