Я не могу получить желаемый результат для массива максимальной кучи, может кто-нибудь сказать мне изменения, которые будут сделаны - PullRequest
2 голосов
/ 01 июля 2019

код питона:

def max_heapify(i, arr, n):
    l = 2*i
    r = 2*i+1
    largest = i
    if (2*i <= n-1 and arr[l] > arr[i]):
        largest = l

    if (2*i+1 <= n-1 and arr[r] > arr[largest]):
        largest = r
    if largest != i:
        temp = arr[largest]
        arr[largest] = arr[i]
        arr[i] = temp

        max_heapify(largest, arr, n)
    return arr

arr=[16,4,10,14,7,9,3,2,8,1]
n=len(arr)

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

1 Ответ

0 голосов
/ 01 июля 2019

Попробуйте это

Программа Python для сортировки кучи

Сортировка кучи - это метод сортировки на основе сравнения, основанный на структуре данных Binary Heap.Это похоже на сортировку выбора, где мы сначала находим максимальный элемент и помещаем максимальный элемент в конец.Мы повторяем тот же процесс для оставшегося элемента.

Программа на Python для реализации кучи def heapify (arr, n, i): largest = i # Initialize largest as root l = 2 * i + 1 # left = 2*i + 1 r = 2 * i + 2 # right = 2*i + 2 # See if left child of root exists and is # greater than root if l < n and arr[i] < arr[l]: largest = l # See if right child of root exists and is # greater than root if r < n and arr[largest] < arr[r]: largest = r # Change root, if needed if largest != i: arr[i],arr[largest] = arr[largest],arr[i] # swap # Heapify the root. heapify(arr, n, largest) Основная функция для сортировки массива заданного размера

def heapSort (arr):

n = len(arr) 



# Build a maxheap. 

for i in range(n, -1, -1): 

    heapify(arr, n, i) 



# One by one extract elements 

for i in range(n-1, 0, -1): 

    arr[i], arr[0] = arr[0], arr[i]   # swap 

    heapify(arr, i, 0) 

Код драйвера для проверки выше

arr = [12, 11, 13, 5, 6, 7] heapSort (arr)

n = len (arr)

print ("Sorted array is")

для i в диапазоне (n):

print ("%d" %arr[i]), 

Этот код предоставлен Мохитом Кумрой

Вывод:

Сортированный массив: 5 6 7 11 12 13

...