Untitled

 avatar
unknown
plain_text
2 years ago
1.1 kB
5
Indexable
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;

void maxheapify(int A[],int i, int size){
    
    int left = (3*i) +1;
    int mid = (3*i) +2;
    int right = (3*i) +3;
    int largest=i;
    if(left<size && A[left]>A[i]){
        largest = left;
    }
    
    if(mid< size && A[mid]>A[largest]){
            
        largest = mid;
        
    }
     if(right<= size && A[right]>A[largest]){
        largest = right;
    }
     if(largest != i){
        swap(A[i],A[largest]);
        maxheapify(A,largest,size);
    }
    
    
}
void buildMaxHeap(int A[],int size){
        for(int i = size/3 ; i>=0; i--){
            maxheapify(A,i,size);
           
        }
}

int main() {
    /* Enter your code here. Read input from STDIN. Print output to STDOUT */   
    int n;
    cin>>n;
    int arr[n];
    for(int i=0;i<n;i++){
        cin>>arr[i];
    }
    buildMaxHeap(arr,n);
    for(int i=0 ; i<n; i++){
        cout<<arr[i]<<" ";
    }
    
    return 0;
}
Editor is loading...