C++实现堆排序

来源:互联网 发布:贵州高考录取数据 编辑:程序博客网 时间:2024/06/06 21:05

C++实现堆排序:

#include<iostream>
#include<vector>
using namespace std;
void maxheapify(int *A,int i,int size)
{
int left=2*i,right=2*i+1,largest=i;
if(left<=size&&A[i]<A[left])
largest=left;
if(right<=size&&A[largest]<A[right])
largest=right;
if(largest!=i)
{ int temp=A[i];
A[i]=A[largest];
A[largest]=temp;
maxheapify(A,largest,size);
}
}


void heapbuild(int *A,int size)
{
for(int i=size/2;i>=1;i--)
maxheapify(A,i,size);
}


void heapsort(int *A,int size)
{
heapbuild(A,size);
int num=size;
for(int i=size;i>=2;i--)
{
int temp=A[1];
A[1]=A[i];
A[i]=temp;
num--;
maxheapify(A,1,num);
}
}
int main(){
/*size_t number=0;
vector<int>vec;
int num;
while(cin>>num)
vec.push_back(num);
cin.clear ();
number=vec.size();
cout<<"输入数字个数"<<number<<endl;
int *p=new int[number];
cout<<"输入的数组"<<endl;
for(vector<int>::iterator iter=vec.begin();iter!=vec.end();++iter,++p)
              *p=*iter;*/
// int A[10]={11,3,4,2,7,5,6,9,8,10};
//heapsort(A,10);
//for(int i=1;i>=9;i++)
// cout<<A[i]<<" ";
int A[100];
for(int i=1;i<=10;i++)
cin>>A[i];
heapsort(A,10);
for(int i=1;i<=10;i++)
cout<<A[i]<<" ";
return 0;
}

0 0