您的位置:首页 > 编程语言 > C语言/C++

C++实现数组最大堆排序

2015-07-14 03:04 661 查看
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
void siftdown(int *heap,int p,int n)
{
while (p * 2 + 1 < n)
{
int temp = p;
if (heap[p] < heap[p * 2 + 1])
{
temp = p * 2 + 1;
}
if (p * 2 + 2 < n&&heap[p * 2 + 2] > heap[temp])
{
temp = p * 2 + 2;
}
if (temp != p)
{
int t = heap[temp];
heap[temp] = heap[p];
heap[p] = t;
p = temp;
}
else
break;
}
}
void build(int *heap,int n)
{
for (int i = (n - 1) / 2; i >= 0; --i)
{
siftdown(heap, i, n);
}
}
void heapsort(int *heap, int n)
{
build(heap, n);//建立堆
while (n)
{
int temp = heap[n - 1];
heap[n - 1] = heap[0];
heap[0] = temp;
--n;
siftdown(heap, 0, n);
}
}
int main()
{
srand((unsigned int)time(NULL));
int n;
while (cin >> n)
{
int *heap = new int
;
for (int i = 0; i < n; ++i)
{
heap[i] = rand() % n;
cout << heap[i] << ' ';
}
cout << endl;
heapsort(heap, n);
for (int i = 0; i < n; ++i)//从小到大
{
cout << heap[i] << ' ';
}
cout << endl;
delete[] heap;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: