当前位置: 代码迷 >> 综合 >> swust.oj.1015
  详细解决方案

swust.oj.1015

热度:40   发布时间:2023-12-14 20:37:12.0

堆排序算法(1015)

Time limit(ms): 1000
Memory limit(kb): 10000
Submission: 3552
Accepted: 2048
Accepted
编写程序堆排序算法。按照非递减排序,测试数据为整数。
Description
第一行是待排序数据元素的个数; 第二行是待排序的数据元素。
Input
一趟堆排序的结果。
Output

10
50 36 41 19 23 4 20 18 12 22
Sample Input

4 12 20 18 22 41 50 36 19 23
#include<stdio.h>
#include<algorithm>
#include<math.h>
#include<string.h>
#include<iostream>
using namespace std;void Sort(int *a, int left, int right)
{int i = left, j = 2 * i;int temp = a[i];while (j <= right){if (j<right&&a[j]>a[j + 1]){j++;}if (temp>a[j]){a[i] = a[j];i = j;j = 2 * i;}else{break;}}a[i] = temp;
}void HeadSort(int *a, int n)
{int i, j;int temp;for (i = n / 2; i >= 1; i--){Sort(a, i, n);}
}int main()
{int i, n;int a[100];cin >> n;for (i = 1; i <= n; i++){cin >> a[i];}HeadSort(a, n);for (i = 1; i <= n; i++){cout << a[i] << " ";}
}