自己实现的堆排序算法的C语言实现
#include<stdio.h>
int parent(int i){
return i/2;
}
int left(int i){
return 2*i;
}
int right(int i){
return 2*i+1;
}
void printA(int a[], int length){
for(int i = 1; i<=length; i++)
printf("%d ",a[i]);
printf("\n");
}
void max_heapify(int a[], int position, int length){
//printA(a, length);
int l = left(position);
int r = right(position);
int max = position;
if(l<=length&& a[max]<a[l])
max = l;
if(r<=length && a[max]<a[r])
max = r;
if(max != position){
int temp = a[position];
a[position] = a[max];
a[max] = temp;
max_heapify(a, max, length);
}
}
void build_max_heap(int a[], int length){
for(int i= length/2; i>=1; i--){
max_heapify(a, i, length);
}
}
void heapsort(int a[], int length){
build_max_heap(a,length);
int temp;
for(int i = length; i>=2; i--){
temp = a[1];
a[1] = a[i];
a[i] = temp;
max_heapify(a, 1, i-1);
}
}
int main(){
int a[] = {0,16,14,10,8,7,9,3,2,4,1};
for(int i=1; i<=10; i++)
printf("%d ",a[i]);
printf("\n");
heapsort(a,10);
printf("\n");
for(int i = 1; i<= 10;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}