亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

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

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
南丰县| 嘉禾县| 扶余县| 灌云县| 五寨县| 平舆县| 武夷山市| 天台县| 望江县| 开化县| 莆田市| 龙岩市| 忻州市| 乐都县| 宜章县| 商河县| 疏附县| 九龙坡区| 镇安县| 神农架林区| 南平市| 盐池县| 南江县| 本溪市| 贵州省| 兰溪市| 浦北县| 阜新| 和平区| 昌图县| 松阳县| 崇阳县| 肇庆市| 虞城县| 娄底市| 赫章县| 乐山市| 尼木县| 龙里县| 洛宁县| 黑河市|