Advertisement
IlidanBabyRage

heapsort.cpp

Nov 5th, 2015
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.96 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. using namespace std;
  5.  
  6. void sift_down(int *ar, int k, int n){
  7.     int cur_ind, next_ind;
  8.     cur_ind = k;
  9.     nyeh:
  10.     next_ind = cur_ind + cur_ind + 1;
  11.     if (next_ind == n - 1){
  12.         heh:
  13.         if (ar[cur_ind] < ar[next_ind]){
  14.             swap(ar[cur_ind], ar[next_ind]);
  15.             cur_ind = next_ind;
  16.             goto nyeh;
  17.         }
  18.     }else if (next_ind < n){
  19.         if (ar[next_ind + 1] > ar[next_ind])
  20.             next_ind = next_ind + 1;
  21.         goto heh;
  22.     }
  23. }
  24.  
  25. void sort(int *ar, int n){
  26.     int  i, n0, next_ind, cur_ind;
  27.     n0 = n / 2 - 1;
  28.     for (i = n0; i >= 0; i--){
  29.         cur_ind = i;
  30.         sift_down(ar, i, n);
  31.     }
  32.     for (i = n - 1; i > 0; i--){
  33.         swap(ar[i], ar[0]);
  34.         sift_down(ar, 0, i);
  35.     }
  36. }
  37.  
  38. int main(){
  39.  
  40.     int *ar, n;
  41.     ifstream input("input.txt");
  42.     input >> n;
  43.     ar = new int[n];
  44.     for (int i = 0; i < n; i++)
  45.         input >> ar[i];
  46.  
  47.     cout << n << endl;
  48.     sort(ar, n);
  49.  
  50.     for (int i = 0; i < n; i++)
  51.         cout << ar[i] << " ";
  52.     cout << endl;
  53.  
  54.     input.close();
  55.  
  56.     return 0;
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement