POJ2371#堆排

来源:互联网 发布:常见网络端口号 编辑:程序博客网 时间:2024/04/30 09:22

本来是一道水题,STL的sort可以秒过,不过想着拿来练练手,手写堆排试试

#include <iostream>using namespace std;void swapNum(int &a, int &b){a = a + b;b = a - b;a = a - b;}void AdjustHeap(int seq[], int begin, int end){int temp = seq[begin];for (int j = begin * 2; j <= end; j *= 2){if (j < end && seq[j] < seq[j + 1])//注意判断j < end{j++;}if (temp > seq[j]){break;}seq[begin] = seq[j];begin = j;}seq[begin] = temp;}void HeapSort(int seq[], int begin, int end){for (int i = end / 2; i >= 1; i--)//构造最大堆{AdjustHeap(seq, i, end);}for (int i = end; i > 1; i--){swapNum(seq[i], seq[1]);AdjustHeap(seq, 1, i - 1);}}int main(){int databaseN = 0;int queryN = 0;int query;char *boundary = new char[];int database[100001];cin >> databaseN;for (int i = 1; i <= databaseN; i++){cin >> database[i];}cin >> boundary;HeapSort(database, 1, databaseN);cin >> queryN;for (int i = 0; i < queryN; i++){cin >> query;cout << database[query] << endl;}}


0 0
原创粉丝点击