Advertisement
Guest User

Untitled

a guest
Mar 27th, 2017
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.00 KB | None | 0 0
  1. /* class Mergesort
  2. */
  3. template<typename T>
  4. class MergeSort: public Sorteermethode<T>{
  5. public:
  6. void operator()(vector<T> &v) const;
  7. void merge(vector<T> &c, vector<T> &d, int l, int m, int r) const;
  8. void mergesort(vector<T> &a, vector<T> &b, int l, int r, bool resinb) const;
  9. };
  10.  
  11. template <typename T>
  12. void MergeSort<T>::operator()(vector<T> & v) const{
  13. vector<T> hulp(v.size());
  14. for(int i=0; i<v.size();i++){
  15. hulp[i] = -1;
  16. }
  17. mergesort(v, hulp, 0, v.size(),true);
  18. cout << "ik geraak na de mergesort";
  19. swap(v,hulp);
  20. }
  21.  
  22. template<typename T>
  23. void MergeSort<T>::mergesort(vector<T> &a, vector<T> &b, int l, int r, bool resinb) const{
  24. if(l<r-1){ //r wijst altijd na de vector
  25. int m = l+(r-l)/2; //beter dan l+r /2 voor maximale hoger dan je kan uitkomen --> overflow is lager
  26. mergesort(a,b,l,m,!resinb);
  27. cout<<"ik geraak na mergesort 1 met l=" << l << "en r= " << r<<endl;
  28. mergesort(a,b,m,r,!resinb);
  29. cout<<"ik geraak na mergesorten 1 en 2"<<endl;
  30. if(resinb){
  31. merge(a,b,l,m,r);
  32. } else{
  33. merge(b,a,l,m,r);
  34. }
  35. } else{
  36. if(resinb){
  37. b[l] = move(a[l]);
  38. }
  39. }
  40. }
  41.  
  42. template<typename T>
  43. 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
  44. int i = l;
  45. int j = m;
  46. int h = l;
  47. while(i<m && j<r){
  48. cout<< "ik kom in while van merge " <<endl;
  49. if(c[i]<=c[j]){
  50. d[h] = c[i]; cout << "d opgevuld " << d[h]<<endl;
  51. h++;
  52. i++;
  53. } else if(c[i]>c[j]){
  54. d[h] = c[j]; cout << "d opgevuld " << d[h] <<endl;
  55. h++;
  56. j++;
  57. }
  58. }
  59. if(i==m){
  60. //while lus stopte omdat alles uit eerste deel al in d zit
  61. while(j<r){
  62. //alle overschot uit 2e deel nog in d steken
  63. d[h] = c[j]; cout << "d opgevuld " << c[j]<<endl;
  64. h++;
  65. j++;
  66. }
  67. } else if(j==r){
  68. //while lus stopte omdat alles uit 2e deel al in d zit
  69. while(i<m){
  70. //alle overschot uit 1e deel in d steken
  71. d[h] = c[i]; cout << "d opgevuld " << c[i]<<endl;
  72. h++;
  73. i++;
  74. }
  75. }
  76.  
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement