自己实现的堆排序算法的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; }