堆排序

#include <stdio.h>
#include <stdlib.h>

//int a[]={1000,10000,9,10,30,999999,50,23,90,100,10};
int a[]={10,9,8,7,6,5};

int length=sizeof(a)/sizeof(int);

int swap(int start, int stop){
	int temp;
	temp=a[start];
	a[start]=a[stop];
	a[stop]=temp;
	return 0;	
}


int buildsubheap( int k , int length1 ){
	
	int biggerpos;	
	if( (2*k+1) > (length1 -1) ){
		return 0;
	}
	biggerpos=2*k+1;
	if((2*k+2)<=(length1-1)){
		biggerpos=a[2*k+2]>a[2*k+1]?(2*k+2):(2*k+1);
	}

	if(a[biggerpos] >a[k]){
		swap(biggerpos,k);
	}
	buildsubheap(biggerpos , length1);

}

int buildbottomtotop(){
	
	int k=length-1;
	int biggerpos;
	int i;
	int outer=k;

	if(length <=1){
		return 0;
	}

	
		while (k>0){
			printf("
 k=%d 
", k);
			biggerpos=k;
			if( (k%2)==0 ){
				biggerpos=a[k]>a[k-1]?k:(k-1);
			}

			if( a[biggerpos] > a[(k-1)/2] ) {
				swap( biggerpos,((k-1)/2) );
				buildsubheap(biggerpos, length);
			}		
			k--;
		}
		for(i=0;i<=length-1;i++){
			printf("%d,", a[i]);
		}
		printf("
 outer=%d 
", outer);
		while( outer >0 ){
			swap(outer, 0);
			buildsubheap(0 , outer);
			outer--;
		}
	}	
		







int main(){
	
	printf("length= %d
",length);	
	int i;
	printf("
");
	//quicksort(0,length-1);
	buildbottomtotop();
	printf("


");
	for(i=0;i<length;i++){
		printf("%d
" , a[i]);
	}
	printf("
");
	
	return 0;
}		

自己实现的堆排序就是好  

MySQL限时解答,24小时内友哥专业解答
http://www.yougemysqldba.com
如有进一步需要请联系微信onesoft007
微博账号@友哥一指
原文地址:https://www.cnblogs.com/youge-OneSQL/p/6298762.html