您的位置:首页 > 其它

堆排序

2016-03-17 10:50 267 查看
算法导论:堆排序实现

#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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法导论