堆排序

//因爲邊界問題調試了一天半,權當是教訓吧
#include<iostream>
#include<algorithm>
using namespace std;
#define N 10
void HeapAdjust(int arr[],int i,int size)
{
	for(int j=2*i;j<=size;j*=2)
	{
		if((j+1<=size)&&(arr[j+1]<arr[j]))
			j++;
		if(arr[j]<arr[i]){
			swap(arr[i],arr[j]);
			i=j;
		}
		else 
			break;
	}
}
void HeapSort(int arr[],int size)
{
	for(int l=size/2;l>=1;--l)
		HeapAdjust(arr,l,size);
	for(int k=size;k>1;--k){
		swap(arr[1],arr[k]);
		HeapAdjust(arr,1,k-1);
	}
}
int main()
{
	int arr[N+1];
	memset(arr,0,sizeof(arr));
	for(int m=1;m<=N;++m)
		cin>>arr[m];
	HeapSort(arr,N);
	for(int n=N;n>=1;--n)
		cout<<arr[n]<<' ';
	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章