堆排序

来源:互联网 发布:怎样在淘宝上做供应商 编辑:程序博客网 时间:2024/06/07 10:41

算法导论:堆排序实现

#include<iostream>
#include<vector>
using namespace std;


//维持堆父节点最大性质
void max_heapify(vector<int>&A, int i,int heap_size)
{
int l = 2 * i;
int r = 2 * i + 1;
int largest = -1;
if (l <= heap_size && A[l - 1] > A[i - 1])
{
largest = l;
}
else
{
largest = i;
}
if (r <= heap_size && A[r - 1] > A[largest - 1])
{
largest = r;
}
if (largest != i)
{
int temp = A[i - 1];
A[i - 1] = A[largest - 1];
A[largest - 1] = temp;
max_heapify(A, largest,heap_size);
}
}
//构造堆
void build_max_heap(vector<int>&A,int heap_size)
{
for (int i = heap_size / 2; i >= 1; --i)
{
max_heapify(A, i,heap_size);
}
}
//堆排序
void heapsort(vector<int>&A)
{
int heap_size = A.size();
build_max_heap(A,heap_size);
cout << endl;
for (int i = heap_size - 1; i >= 1;--i)
{
int temp = A[0];
A[0] = A[i];
A[i] = temp;
heap_size = heap_size - 1;
max_heapify(A, 1,heap_size);
}
}
int main()
{
vector<int>A;
int n;
while (cin >> n)
{
A.push_back(n);
}
heapsort(A);
for (int i = 0; i < A.size(); ++i)
{
cout << A[i] << ends;
}
cout << endl;
return 0;
}

0 0