堆排序(最大堆)

2015-01-26 23:13:35 · 作者: · 浏览: 3
#include "iostream.h"
using namespace std;
//因为i从0开始 
#define LeftChild(i) (2*(i)+1)
//i-N范围内,创建最大堆 
void maxHeap(int A[], int i, int N){
	int tmp;
	int child;
	for(tmp=A[i];LeftChild(i)
  
   A[child]){
			child++;
		}
		if(tmp
   
=0;i--){ maxHeap(A,i,N); } for(int i=N-1;i>0;i--){ //A[0]是最大堆的最大值,通过交换,把堆的最大值置于队尾 swap(A[0],A[i]); //重建最大堆 maxHeap(A,0,i); } } int main(int argc, char *argv[]) { int N; cin>>N; int A[100]; for(int i=0;i >A[i]; } HeapSort(A,N); for(int i=0;i