堆排算法实现

      堆排,时间复杂度O(nlogn),空间复杂度O(1)。

#include<iostream>
#include<algorithm>
using namespace std;
void sift(int nums[],int low,int high){
	int i=low,j=2*i;
	while (j<=high)
	{
		if(j<high&&nums[j]<nums[j+1])
			j++;
		if(nums[i]<nums[j]){
			swap(nums[i],nums[j]);
			i=j;
			j=2*i;
		}
		else
		{
			break;
		}			
	}
}
void heapSort(int array[],int n){
	int i;
	for(i=n/2+1;i>=0;i--){
		sift(array,i,n);
	}
	for(i=1;i<n;i++){//循环n-1次
		swap(array[0],array[n-i]);
		sift(array,0,n-i-1);
	}
}
int main()
{
	int array[]={2,1,78,67,56,5,6,2,3};
	size_t n=sizeof(array)/sizeof(int);
	heapSort(array,n);
	for(int i=0;i<n-1;i++)
    cout<<array[i]<<" ";
	cout<<array[n-1]<<endl;
    return 0;
}
点赞