Я дал массив int A[] = {12,10,9,2,11,8,14,3,5};
В этом массиве первые 4 элемента (от индекса 0 до индекса 3) следуют условию максимальной кучи. Но последние 5 элементов (от индекса 4 до индекса 8) не соответствуют условию максимальной кучи. Итак, мне нужно написать код, чтобы весь массив соответствовал условию max heap.
Я дал вызов функции max_heap_append(A,3,8);
, и я должен использовать его в своем коде для написания программы. Это задание, поэтому я должен следовать инструкции.
Я написал этот код ниже, но когда я запускаю программу, ничего не происходит.
#include <stdio.h>
#include <stdlib.h>
void swap(int * a, int * b )
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
void heapify( int A[], int q, int i)
{
int largest = i;
int l = 2 * i + 1 ;
int r = 2 * i + 2;
if( l < q && A[l] > A[largest])
{
largest = l;
}
if( r < q && A[r] > A[largest])
{
largest = r;
}
if( largest != i)
{
swap( &A[i] , &A[largest]);
heapify(A, q, largest);
}
}
void max_heap_append(int A[], int p , int q)
{
int i;
for( i = q / 2 -1; i >= 0; i--)
{
heapify( A , q , i);
}
// sort the heap
for( i = q; i>= 0; i--)
{
swap(&A[0] , &A[i]);
heapify(A, i, 0);
}
}
void printA(int A[], int q)
{
int i;
for( i = 0; i <= q; i++)
{
printf("%d", A[i]);
}
printf("%d\n");
}
int main()
{
int A[] = {12,10,9,2,11,8,14,3};
max_heap_append(A,3,8);
printf("Sorted: ");
printA(A, 8);
return 0;
}