您的位置:首页 > 其它

堆排序算法

2017-06-30 18:14 183 查看
Description

编写程序堆排序算法。按照非递减排序,测试数据为整数。

Input

第一行是待排序数据元素的个数; 第二行是待排序的数据元素。

Output

一趟堆排序的结果

Sample Input

行数数据
110
214 12 20 18 22 41 50 36 19 23
代码

#include<iostream>
using namespace std;
void sift(int a[], int low, int high)
{
int i = low, j = 2 * i;
int temp = a[low];
while (j <= high)
{
while (j < high&&a[j] > a[j + 1])
j++;
if (temp > a[j])
{
a[i] = a[j];
i = j;
j = i * 2;
}
else break;
}
a[i] = temp;
}
void heap(int a[], int n)
{
int i, temp;
for (i = n / 2; i >= 1; i--)
{
sift(a, i, n);
}
}
int main()
{
int a[100], i, n;
cin >> n;
for (i = 1; i <= n; i++)
cin >> a[i];
heap(a, n);
for (i = 1; i <= n; i++){
cout << a[i] << ' ';
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  堆排序 算法