fork download
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. const int N = (int)20;
  7.  
  8. int a[N];
  9. vector<int> aux;
  10.  
  11. void merge(vector<int> v1, vector<int> v2) {
  12. int i = 0, j = 0;
  13.  
  14. while(i < v1.size() && j < v2.size()) {
  15. if (v1[i] <= v2[j]) aux.push_back(v1[i++]);
  16. else aux.push_back(v2[j++]);
  17. }
  18.  
  19. while(i < v1.size()) aux.push_back(v1[i++]);
  20. while(j < v2.size()) aux.push_back(v2[j++]);
  21. }
  22.  
  23. void merge_sort(int left, int right) {
  24. if (left >= right) return;
  25.  
  26. int mid = (left + right) / 2;
  27.  
  28. vector<int> l, r;
  29.  
  30. merge_sort(left, mid);
  31. merge_sort(mid + 1, right);
  32.  
  33. for(int i = left; i <= mid; i++) l.push_back(a[i]);
  34. for(int i = mid+1; i <= right; i++) r.push_back(a[i]);
  35.  
  36. aux.clear();
  37. merge(l, r);
  38.  
  39. for(int i = left; i <= right; i++) {
  40. a[i] = aux[i - left];
  41. }
  42.  
  43. }
  44.  
  45. int main() {
  46. for(int i =0 ; i < N; i++) {
  47. a[i] = rand() % 1001;
  48.  
  49. if (i < 20)
  50. cout << a[i] << " ";
  51. }
  52. cout << endl << endl << endl;
  53.  
  54. merge_sort(0, N - 1);
  55.  
  56. for(int i = 0; i < 20; i++) {
  57. cout << a[i] << " ";
  58. }
  59. cout << endl;
  60. }
  61.  
Success #stdin #stdout 0.01s 5280KB
stdin
Standard input is empty
stdout
897 802 765 992 1 521 220 380 729 969 184 887 104 641 909 378 724 582 387 583 


1 104 184 220 378 380 387 521 582 583 641 724 729 765 802 887 897 909 969 992