Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include <iostream>
- #include <cstdlib>
- #include <ctime>
- static const int M=10;
- using namespace std;
- void swap( int &A, int &B)
- {
- int t=A;
- A=B;
- B=t;
- }
- void insertionsort (vector<int>&a, int l, int r)
- {
- int key, i;
- for (int j=l+1; j <= r; j++)
- {
- key = a[j];
- i = j-1;
- while ( i >= l && a[i] > key)
- {
- a[i+1]= a[i];
- i--;
- }
- a[i+1]=key;
- }
- }
- void compswap ( int &A, int &B)
- {
- if (B >A) swap(A,B);
- }
- typedef int Item;
- int partition(vector<int>&a, int l, int r)
- {
- int i= l-1, j=r;
- Item v = a.at(r);
- for(;;)
- {
- while(a.at(++i) < v);
- while(v< a.at(--j)) if (j == l) break;
- if (i >= j) break;
- swap(a.at(i),a.at(j));
- }
- swap(a.at(i),a.at(r));
- return i;
- }
- void quicksort(vector<int>&a, int l, int r)
- {
- int c=r-l;
- if (c > M)
- {
- swap(a.at((l+r)/2),a.at(r-1));
- compswap(a.at(l),a.at(r-1));
- compswap(a.at(l),a.at(r));
- compswap(a.at(r-1),a.at(r));
- int i = partition(a,l+1,r-1);
- quicksort(a,l,i-1);
- quicksort(a,i+1,r);
- }
- }
- void hybridsort(vector<int>&a, int l, int r)
- {
- quicksort (a,l,r);
- insertionsort (a,l,r);
- }
- int main()
- {
- cout<<"Inserisci il numero di elementi da ordinare del vettore: ";
- int tot;
- cin>>tot;
- vector<int> arr1;
- int x;
- cout<<"Inserimento: "<<endl;
- for(int i=0; i < tot ; i++){
- cin>>x;
- arr1.push_back(x);
- }
- cout<<"\nQuickSort"<<endl;
- hybridsort(arr1,0,tot-1); //tot-1 = arr1.size()-1;
- for(auto z : arr1)
- cout<<"\n"<<z;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement