The following implementation is a bit different form the standard implementations I have read. Is it correct?
#include <malloc.h>
#include <stdio.h>
void heapify(int[],int,int);
void swap(int a[],int i,int j){
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
void heap_sort(int a[],int l,int r){
for(int i=l;i<r;i++)
heapify(a,l,r);
}
void heapify(int a[],int l,int r){//brings largest element to position l
int size=(r-l+1);
int i=size-1,larger;
if(size%2){
if(a[l+i]<a[l+i/2])
swap(a,l+i,l+i/2);
i--;}
while(i>0){
if(a[l+i]>a[l+i-1])
larger=l+i-1;
else
larger=l+i;
if(a[l+(i-1)/2]>a[larger])
swap(a,larger,l+(i-1)/2);
i-=2;
}
}
void printArray(int arr[], int n)
{
int i;
for (i=0; i < n; i++)
printf("%d ", arr[i]);
printf("\n");
}
/* Driver program to test insertion sort */
int main()
{
int arr[] = {12, 11, 13, 5, 6, 7};
int arr_size = sizeof(arr)/sizeof(arr[0]);
printf("Given array is \n");
printArray(arr, arr_size);
heap_sort(arr,0,arr_size-1);
printf("\nSorted array is \n");
printArray(arr, arr_size);
return 0;
return 0;
}