Advertisement
darkjessy94

randomized quicksort

Oct 18th, 2017
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.21 KB | None | 0 0
  1. #include <vector>
  2. #include <iostream>
  3. #include <cstdlib>
  4. #include <ctime>
  5.  
  6. using namespace std;
  7.  
  8. void QuickSort(vector<int> &a, int l, int r);
  9. int partiziona(vector<int> &a, int l, int r);
  10. void scambia(int &a, int &b);
  11.  
  12. int main()
  13. {
  14.     srand((unsigned)time(0));
  15.     cout<<"Inserisci il numero di elementi da ordinare del vettore: ";
  16.     int tot;
  17.     cin>>tot;
  18.     vector<int> arr1;
  19.     int x;
  20.     cout<<"Inserimento: "<<endl;
  21.     for(int i=0; i < tot ; i++){
  22.         cin>>x;
  23.         arr1.push_back(x);
  24.     }
  25.     cout<<"\nQuickSort"<<endl;
  26.     QuickSort(arr1,0,tot-1); //tot-1 = arr1.size()-1;
  27.     for(auto z : arr1)
  28.         cout<<"\n"<<z;
  29.     return 0;
  30. }
  31.  
  32. void QuickSort(vector<int> &a, int l,  int r){
  33. if(l >= r)return;
  34.     int m = partiziona(a,l,r);
  35.     QuickSort(a,l,m-1);
  36.     QuickSort(a,m+1,r);
  37. }
  38.  
  39. int partiziona(vector<int> &a, int l, int r)
  40. {
  41.     int random_ind = l+rand()%(r-l+1);
  42.     int pivot = a.at(random_ind), J = l, i;
  43.     for(i = l; i < r; i++)
  44.         if(pivot >= a.at(i))
  45.             scambia(a.at(i), a.at(J++));
  46.     scambia(a.at(i), a.at(J));
  47.     return J;
  48. }
  49. // | 1 | | 3 | | 2 |
  50. void scambia(int &a, int &b)
  51. {
  52.     int temp;
  53.     temp = a;
  54.     a = b;
  55.     b = temp;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement