#include <stdio.h>
#include <stdlib.h>
#define MAX_INT 655354
#define NUM 16
void heapSort(int array[],int length);
void exchange(int array[],int a, int b);
void printArray(int array[], int length);
int main()
{
int array[NUM] = {23,12,3,4,2,3,234,5655,34,123,445,44,3,4,56,78};
int i ;
heapSort(array,NUM);
printArray(array,NUM);
return 0;
}
void printArray(int array[], int length)
{
int i;
for(i = 0; i < length; ++i )
{
printf("%d ",array[i]);
}
printf("\n");
}
void maxHeapify(int array[],int i,int heapSize)
{
int l = i * 2 + 1;
int r = (i + 1) * 2;
int largest = i;
if (l < heapSize && array[l] > array[i] )
{
largest = l;
}
if(r < heapSize && array[r] > array[largest])
{
largest = r;
}
if(largest != i)
{
exchange(array,largest,i);
maxHeapify(array,largest,heapSize);
}
}
void buildMaxHeap(int array[],int length)
{
int i;
for(i = (length - 2) / 2; i >= 0; --i)
{
maxHeapify(array,i,length);
}
}
void heapSort(int array[],int length)
{
int i;
buildMaxHeap(array,length);
for(i = length - 1; i >= 1; --i)
{
exchange(array,0,i);
maxHeapify(array,0,i - 1);
}
}
// exchange content of position a and b in array
void exchange(int array[],int a, int b)
{
int temp;
temp = array[a];
array[a] = array[b];
array[b] = temp;
}
算法导论-堆排序-C语言
最新推荐文章于 2024-07-13 13:36:16 发布