Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* class Mergesort
- */
- template<typename T>
- class MergeSort: public Sorteermethode<T>{
- public:
- void operator()(vector<T> &v) const;
- void merge(vector<T> &c, vector<T> &d, int l, int m, int r) const;
- void mergesort(vector<T> &a, vector<T> &b, int l, int r, bool resinb) const;
- };
- template <typename T>
- void MergeSort<T>::operator()(vector<T> & v) const{
- vector<T> hulp(v.size());
- for(int i=0; i<v.size();i++){
- hulp[i] = -1;
- }
- mergesort(v, hulp, 0, v.size(),true);
- cout << "ik geraak na de mergesort";
- swap(v,hulp);
- }
- template<typename T>
- void MergeSort<T>::mergesort(vector<T> &a, vector<T> &b, int l, int r, bool resinb) const{
- if(l<r-1){ //r wijst altijd na de vector
- int m = l+(r-l)/2; //beter dan l+r /2 voor maximale hoger dan je kan uitkomen --> overflow is lager
- mergesort(a,b,l,m,!resinb);
- cout<<"ik geraak na mergesort 1 met l=" << l << "en r= " << r<<endl;
- mergesort(a,b,m,r,!resinb);
- cout<<"ik geraak na mergesorten 1 en 2"<<endl;
- if(resinb){
- merge(a,b,l,m,r);
- } else{
- merge(b,a,l,m,r);
- }
- } else{
- if(resinb){
- b[l] = move(a[l]);
- }
- }
- }
- template<typename T>
- void MergeSort<T>::merge(vector<T> &c, vector<T> &d, int l, int m, int r) const{ //moet van c naar d om zoveel mogelijk kopieren te vermijden
- int i = l;
- int j = m;
- int h = l;
- while(i<m && j<r){
- cout<< "ik kom in while van merge " <<endl;
- if(c[i]<=c[j]){
- d[h] = c[i]; cout << "d opgevuld " << d[h]<<endl;
- h++;
- i++;
- } else if(c[i]>c[j]){
- d[h] = c[j]; cout << "d opgevuld " << d[h] <<endl;
- h++;
- j++;
- }
- }
- if(i==m){
- //while lus stopte omdat alles uit eerste deel al in d zit
- while(j<r){
- //alle overschot uit 2e deel nog in d steken
- d[h] = c[j]; cout << "d opgevuld " << c[j]<<endl;
- h++;
- j++;
- }
- } else if(j==r){
- //while lus stopte omdat alles uit 2e deel al in d zit
- while(i<m){
- //alle overschot uit 1e deel in d steken
- d[h] = c[i]; cout << "d opgevuld " << c[i]<<endl;
- h++;
- i++;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement