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.  
  10. void merge(int start, vector<int> v1, vector<int> v2) {
  11. int i = 0, j = 0;
  12.  
  13. while(i < v1.size() && j < v2.size()) {
  14. if (v1[i] <= v2[j]) a[start++] = v1[i++];
  15. else a[start++] = v2[j++];
  16. }
  17.  
  18. while(i < v1.size()) a[start++] = v1[i++];
  19. while(j < v2.size()) a[start++] = v2[j++];
  20. }
  21.  
  22. void merge_sort(int left, int right) {
  23. if (left >= right) return;
  24.  
  25. int mid = (left + right) / 2;
  26.  
  27. vector<int> l, r;
  28.  
  29. merge_sort(left, mid);
  30. merge_sort(mid + 1, right);
  31.  
  32. for(int i = left; i <= mid; i++) l.push_back(a[i]);
  33. for(int i = mid+1; i <= right; i++) r.push_back(a[i]);
  34.  
  35. merge(left, l, r);
  36. }
  37.  
  38. bool is_sorted() {
  39. for(int i = 0; i < N - 1; i++) if (a[i] > a[i + 1]) return false;
  40. return true;
  41. }
  42.  
  43. int main() {
  44. for(int i =0 ; i < N; i++) a[i] = rand() % 1001;
  45.  
  46. merge_sort(0, N - 1);
  47.  
  48. cout << "sorted: " << is_sorted() << endl;
  49. }
  50.  
Success #stdin #stdout 0.01s 5272KB
stdin
Standard input is empty
stdout
sorted: 1