您的位置:首页 > 其它

一个简单的堆排序(heapsort)

2017-09-29 12:58 225 查看
#include <iostream>
#include <vector>

using namespace std;

#define LEFT(i) (i<<1)
#define RIGHT(i) ((i<<1) + 1)//tips:+的优先级高于<<

vector<int>& max_heapify(vector<int>& A,int i)
{
int large = i;
if(LEFT(i) < A.size() && A[i] < A[LEFT(i)])large = LEFT(i);
if(RIGHT(i) < A.size() && A[large] < A[RIGHT(i)])large = RIGHT(i);
if(large == i)return A;
int t = A[large];
A[large] = A[i];
A[i] = t;
return max_heapify(A,large);
}

vector<int>& build_max_heap(vector<int>& A)
{
for(int i = A.size()/2;i >= 1;--i)
{
max_heapify(A,i);
}
return A;
}

vector<int>& heap_sort(vector<int>& A)
{
int l = A.size();
for(int i = 1;i < l;++i)
{
cout<<A[1]<<endl;
int t = A[A.size() - 1];
A[A.size() - 1] = A[1];
A[1] = t;
A.pop_back();
max_heapify(A,1);
}
}

int main()
{
vector<int>A = {0,1,5,6,4,7,3,8,9,1,2,3,4,5};
build_max_heap(A);
heap_sort(A);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 堆排序