gon2

heapsort c++

Mar 13th, 2018
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.75 KB | None | 0 0
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. // Skilgreiningar:
  8. void hruga(vector<int>&, int, int);
  9. bool minna(vector<int>&, int, int);
  10. void exchange(vector<int>&, int, int);
  11.  
  12. void heapsort(vector<int>& v) {
  13.     int n = v.size();
  14.     for (int k=n/2; k>=1; k--)
  15.         hruga(v, k, n);
  16.     while (n > 1) {
  17.         exchange(v, 1, n--);
  18.         hruga(v, 1, n);
  19.     }
  20. }
  21.  
  22. void hruga(vector<int>& v, int k, int n) {
  23.     while (2*k <= n) {
  24.         int j = 2*k;
  25.         if (j<n && minna(v, j, j+1)) j++;
  26.         if (!minna(v, k, j)) break;
  27.         exchange(v, k, j);
  28.         k = j;
  29.     }
  30. }
  31.  
  32. bool minna(vector<int>& v, int i, int j) {
  33.     return v[i-1] < v[j-1];
  34. }
  35.  
  36. void exchange(vector<int>& v, int i, int j) {
  37.     int swap = v[i-1];
  38.     v[i-1] = v[j-1];
  39.     v[j-1] = swap;
  40. }
  41. /////////////////////////////////////////////////////
  42.  
  43. bool issorted(vector<int>& v) {
  44.     /*
  45.      * Athugar hvort vigurinn v sé í stígandi röð
  46.      */
  47.     cout << endl;
  48.     for (int i = 1; i < v.size(); i++) {
  49.         if (v[i] < v[i - 1]) {
  50.             return false;
  51.         }
  52.     }
  53.     return true;
  54. }
  55.  
  56. int main() {
  57.     // Prófum sort á vigrum af lengdunum 0, 101, og 1000:
  58.     vector<int> sizes = {0, 101, 1000};
  59.     for (int n : sizes) {
  60.         // Upphafstillum v með tölunum 0 upp í n-1 í slembinni röð
  61.         vector<int> v(n);
  62.         for (int i = 0; i < n; i++) {
  63.             v[i] = i;
  64.         }
  65.         random_shuffle(v.begin(), v.end());
  66.  
  67.         // Röðum v aftur
  68.         heapsort(v);
  69.  
  70.         // Athugum hvort röðunin tókst
  71.         if (issorted(v)) {
  72.             cout << "Röðun á " << v.size() << " staka vigri tókst" << endl;
  73.         } else {
  74.             cout << "Röðun á " << v.size() << " staka vigri mistókst" << endl;
  75.         }
  76.     }
  77. }
Advertisement
Add Comment
Please, Sign In to add comment