Hey I have this code and it counts 2 but i think it should count more then that see what you guys think
Code:
#include <stdlib.h>
#include <stdio.h>
#define num_items 75
int heapSort(int numbers[], int array_size,int counter);
void siftDown(int numbers[], int root, int bottom);
int numbers[num_items];
int main()
{
int i,counter;
rand();
for(i=0; i < num_items; i++)
{
numbers[i]=rand();
}
counter=0;
counter = heapSort(numbers, num_items, counter);
printf("Done with Sort.\n");
for(i=0; i < num_items; i++)
{
printf("%i\n", numbers[i]);
}
printf("Counter=%i\n", counter);
}
int heapSort(int numbers[], int array_size, int counter)
{
int i, j, temp;
for(i=(array_size/2)-1; i >=0; i--)
{
siftDown(numbers,i,array_size);
counter++;
for(j=1; j<=1; j++)
{
counter++;
for(i=array_size-1; i>=1; i--)
{
temp=numbers[0];
numbers[0]=numbers[i];
numbers[i]=temp;
siftDown(numbers, 0, i-1);
}
}
}
return counter;
}
void siftDown(int numbers[], int root, int bottom)
{
int done, maxChild, temp;
done=0;
while((root*2 <=bottom) && (!done))
{
if(root*2 == bottom)
maxChild=root*2;
else if (numbers[root*2] > numbers[root*2+1])
maxChild=root*2;
else
maxChild=root*2+1;
if(numbers[root] < numbers[maxChild])
{
temp=numbers[root];
numbers[root]=numbers[maxChild];
numbers[maxChild]=temp;
root=maxChild;
}
else
done=1;
}
}