C++ 堆排序

#include<iostream>
#include<vector>

using namespace std;

void heapify(vector<int>& v,int left,int right){
    
    
	int dad = left;
	int son = dad*2+1;
	while(son<=right){
    
    
		if(v[son]<v[son+1] && son+1<=right)
		{
    
    
			son++;
		}
		if(v[son]<v[dad])
			return;
		else if(v[son]>v[dad])
		{
    
    
			swap(v[son],v[dad]);
			dad = son;
			son = dad*2+1;
		}
	}
}

void HeapSort(vector<int>& v,int len){
    
    
	for(int i=len/2-1;i>=0;i--){
    
    
		heapify(v,i,len-1);
	}
	for(int i=len-1;i>0;i--){
    
    
		swap(v[0],v[i]);
		heapify(v,0,i-1);
	}
}

int main()
{
    
    
	int n =0;
	cin>>n;
	vector<int> v(n);
	for(int i=0;i<n;i++){
    
    
		v[i] =rand();
	}

	for(auto&it:v){
    
    
		cout<<it<<' ';
	}
	cout<<endl;

	HeapSort(v,n);

	for(auto&it:v){
    
    
		cout<<it<<' ';
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/lzq6261/article/details/133386118
今日推荐