gon2

quicksort.cpp

Feb 28th, 2018
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.23 KB | None | 0 0
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. // skilgreiningar:
  8. void quicksort(vector<int>&);
  9. void quicksorts(vector<int>&, int, int);
  10. int partition(vector<int>&, int, int);
  11. void exchange(vector<int>&, int, int);
  12.  
  13. void quicksort(vector<int>& v) {
  14.   // Hingað þarf að koma útfærsla á quicksort!
  15.   // Mælt er með því að fylgja hugmyndunum í Quick.java.
  16.  
  17.     // ég skil útfrá ábendingu 1 að það eigi að shuffla aftur?:
  18.     random_shuffle(v.begin(), v.end());
  19.     quicksorts(v, 0, v.size()-1);
  20. }
  21.  
  22. // sorterar undirvigurinn frá lo til hi
  23. void quicksorts(vector<int>& v, int lo, int hi) {
  24.     if (hi <= lo) return;
  25.     int j = partition(v, lo, hi);
  26.     quicksorts(v, lo, j-1);
  27.     quicksorts(v, j+1, hi);
  28. }
  29.  
  30. // skiptir undirvigrinum
  31. int partition(vector<int>& v, int lo, int hi) {
  32.     int i = lo;
  33.     int j = hi + 1;
  34.     int a = v[lo];
  35.     while (true) {
  36.         // finnum gildi fyrir lo til að skipta
  37.         while (v[++i] < a) {
  38.             if (i == hi) break;
  39.         }
  40.         // finnum gildi fyrir hi til að skipta
  41.         while (a < v[--j]) {
  42.             if (j == lo) break;
  43.         }
  44.  
  45.         if (i >= j) break;
  46.  
  47.         exchange(v, i, j);
  48.     }
  49.  
  50.     exchange(v, lo, j);
  51.     return j;
  52. }
  53.  
  54. // skiptum á v[i] og v[j]
  55. void exchange(vector<int>& v, int i, int j) {
  56.     int skipta = v[i];
  57.     v[i] = v[j];
  58.     v[j] = skipta;
  59. }
  60.  
  61. bool issorted(vector<int>& v) {
  62.     /*
  63.      * Athugar hvort vigurinn v sé í stígandi röð
  64.      */
  65.     cout << endl;
  66.     for (int i = 1; i < v.size(); i++) {
  67.         if (v[i] < v[i - 1]) {
  68.             return false;
  69.         }
  70.     }
  71.     return true;
  72. }
  73.  
  74. int main() {
  75.     // Prófum sort á vigrum af lengdunum 0, 101, og 1000:
  76.     vector<int> sizes = {0, 10, 20};
  77.     for (int n : sizes) {
  78.         // Upphafstillum v með tölunum 0 upp í n-1 í slembinni röð
  79.         vector<int> v(n);
  80.         for (int i = 0; i < n; i++) {
  81.             v[i] = i;
  82.         }
  83.         random_shuffle(v.begin(), v.end());
  84.  
  85.         // Röðum v aftur
  86.         quicksort(v);
  87.  
  88.         // Athugum hvort röðunin tókst
  89.         if (issorted(v)) {
  90.             cout << "Röðun á " << v.size() << " staka vigri tókst" << endl;
  91.         } else {
  92.             cout << "Röðun á " << v.size() << " staka vigri mistókst" << endl;
  93.         }
  94.     }
  95. }
Advertisement
Add Comment
Please, Sign In to add comment