编辑代码

#include <stdio.h>
#include <stdlib.h>
void Display(int a[],int len){
	for(int i=0;i<len;i++){
		printf("%d ",a[i]);
	}
	printf("\n");
}
void Copy(int a[],int b[],int len,int state){
	if(state==1){
		for(int i=0;i<len;i++){
			b[i+1]=a[i];
		}
	}
	else if(state==2){
		for(int i=0;i<len;i++){
			a[i]=b[i+1];
		}
	}
}
//堆排序
void Heap(int b[],int len){
	for(int index=2;index<len;index++){
		int childIndex=index;
		while(childIndex>1){
			int parentIndex=childIndex/2;
			if(b[parentIndex]<b[childIndex]){
				int temp=b[parentIndex];
				b[parentIndex]=b[childIndex];
				b[childIndex]=temp;
				childIndex=parentIndex;
			}
			else{
				break;
			}
		}	
	}
}
void HeapSort(int a[],int len){
	int b[len+1];
	int lenOfB=sizeof(b)/sizeof(int);
	//拷贝
	Copy(a,b,len,1);
	//交换
	for(int i=lenOfB;i>1;i--){
		Heap(b,i);
		int temp=b[1];
		b[1]=b[i-1];
		b[i-1]=temp;
	}
	//拷回
	Copy(a,b,len,2);
}

int main(){
	int a[]={5,3,6,64,8,2};
	HeapSort(a,sizeof(a)/sizeof(int));
	Display(a,sizeof(a)/sizeof(int));
	int a2[]={2,12,2,31,12,34,5};
	HeapSort(a2,sizeof(a2)/sizeof(int));
	Display(a2,sizeof(a2)/sizeof(int));
	int a3[]={5,0,0,0,0,0};
	HeapSort(a3,sizeof(a3)/sizeof(int));
	Display(a3,sizeof(a3)/sizeof(int));
	return 0;
}