HeapSort
2013-10-01 19:15
519 查看
在O(nlgn)的复杂度下可以实现排序,
# include <stdio.h> # define HEAP_SIZE 7 int Heap_Size = HEAP_SIZE - 1 ; int Parent(int i){ return i/2; } int Left(int i){ return 2*i; } int Right(int i ){ return 2*i+1; } void Exchange(int *p , int * q){ int temp = * p ; *p = * q; *q = temp ; } void Max_Heapfy(int A[], int i){ int left = Left(i); int right= Right(i); int maxer ; if( left <= Heap_Size && A[i] < A[left]){ maxer = left; }else{ maxer = i; } if (right <= Heap_Size && A[maxer] < A[right] ){ maxer = right; } if (i != maxer){ Exchange(&A[maxer],&A[i]); Max_Heapfy(A,maxer); } return ; } void Build_Max_Heap(int A[]){ for (int i = Heap_Size/2 ; i >= 0 ; i --){ Max_Heapfy(A,i); } } void HeapSort(int A[]){ Build_Max_Heap(A); for (int i = Heap_Size ; i >= 1 ;i --){ Exchange(&A[0],&A[i]); Heap_Size = Heap_Size - 1; Max_Heapfy(A,0); } } int main(void){ int a[] = { 7,1,3,2,4,6,5}; HeapSort(a); for (int i = 0 ; i < HEAP_SIZE ; i ++ ){ printf("%5d ", a[i]); } return 0; }