Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define cin fin
- #define cout fout
- #define sp << " " <<
- #define nl << "\n"
- ifstream fin("prob.in");
- ofstream fout("prob.out");
- int n, i, j, h[100], k, y, a;
- void heapsort(int arr[], int n) {
- bool swapped = true;
- int j = 0;
- int tmp;
- while (swapped) {
- swapped = false;
- j++;
- for (int i = 0; i < n - j; i++) {
- if (arr[i] < arr[i + 1]) {
- tmp = arr[i];
- arr[i] = arr[i + 1];
- arr[i + 1] = tmp;
- swapped = true;
- }
- }
- }
- }
- void insert(int a) {
- n++;
- k++;
- h[k] = a;
- }
- void aranjeaza(int nn) {
- int x;
- x = h[nn];
- while (nn > 1 && x > h[nn / 2]) {
- h[nn] = h[nn / 2];
- nn = nn / 2;
- }
- h[nn] = x;
- }
- void down(int n) {
- int fiu = -1;
- while (fiu != 0) {
- if (2 * n <= k)
- fiu = 2 * n;
- if (2 * n + 1 <= k && h[2 * n + 1] >= h[fiu])
- fiu = 2 * n + 1;
- if (h[fiu] <= h[n])
- fiu = 0;
- if (fiu) {
- swap(h[n], h[fiu]);
- n = fiu;
- }
- }
- }
- void stergerea() {
- if (k < 1) return;
- cout << h[1]<<" ";
- h[1] = h[k];
- k--;
- n--;
- down(1);
- }
- void siftDown(int *numbers, int root, int bottom)
- {
- int maxChild;
- int done = 0;
- while ((root * 2 <= bottom) && (!done))
- {
- if (root * 2 == bottom)
- maxChild = root * 2;
- else if (numbers[root * 2] > numbers[root * 2 + 1])
- maxChild = root * 2;
- else
- maxChild = root * 2 + 1;
- if (numbers[root] < numbers[maxChild])
- {
- int temp = numbers[root];
- numbers[root] = numbers[maxChild];
- numbers[maxChild] = temp;
- root = maxChild;
- }
- else
- done = 1;
- }
- }
- void heapSort(int *numbers, int array_size)
- {
- for (int i = (array_size / 2) - 1; i >= 0; i--)
- siftDown(numbers, i, array_size - 1);
- for (int i = array_size - 1; i >= 1; i--)
- {
- int temp = numbers[0];
- numbers[0] = numbers[i];
- numbers[i] = temp;
- siftDown(numbers, 0, i - 1);
- }
- }
- int main() {
- int t;
- k = 0;
- while (cin >> t) {
- insert(t);
- aranjeaza(k);
- }
- cout << "Max-heapul : " << endl;
- for (i = 1; i <= k; i++)
- cout << h[i] << " ";
- cout nl;
- cout << "Max " nl ;
- for (int i = 1; i <= 3; i++) {
- stergerea();
- }
- cout nl;
- if (k == 0) {
- cout << "Heapul este gol!" nl;
- } else {
- cout << "Max-heapul modificat: " << endl;
- for (i = 1; i <= k; i++)
- cout << h[i] << " ";
- cout << endl;
- }
- int h1[1000];
- for(i=0;i<k;i++)
- {
- h1[i]=h[i+1];
- }
- heapsort(h1,k);
- for (i = 0; i < k; i++)
- cout << h1[i] << " ";
- cout nl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement