fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. void merge(int arr[], int p, int q, int r) {
  5.  
  6. int n1 = q - p + 1;
  7. int n2 = r - q;
  8.  
  9. int L[n1], M[n2];
  10.  
  11. for (int i = 0; i < n1; i++)
  12. L[i] = arr[p + i];
  13. for (int j = 0; j < n2; j++)
  14. M[j] = arr[q + 1 + j];
  15.  
  16. int i, j, k;
  17. i = 0;
  18. j = 0;
  19. k = p;
  20.  
  21. while (i < n1 && j < n2) {
  22. if (L[i] <= M[j]) {
  23. arr[k] = L[i];
  24. i++;
  25. } else {
  26. arr[k] = M[j];
  27. j++;
  28. }
  29. k++;
  30. }
  31.  
  32. while (i < n1) {
  33. arr[k] = L[i];
  34. i++;
  35. k++;
  36. }
  37.  
  38. while (j < n2) {
  39. arr[k] = M[j];
  40. j++;
  41. k++;
  42. }
  43. }
  44. void mergeSort(int arr[], int l, int r) {
  45. if (l < r) {
  46. int m = l + (r - l) / 2;
  47.  
  48. mergeSort(arr, l, m);
  49. mergeSort(arr, m + 1, r);
  50. merge(arr, l, m, r);
  51. }
  52. }
  53.  
  54. void printArray(int arr[], int size) {
  55. for (int i = 0; i < size; i++)
  56. cout << arr[i] << " ";
  57. cout << endl;
  58. }
  59.  
  60. int main() {
  61. int arr[] = {6, 5, 12, 10, 9, 1};
  62. int size = sizeof(arr) / sizeof(arr[0]);
  63.  
  64. mergeSort(arr, 0, size - 1);
  65.  
  66. cout << "Sorted array: \n";
  67. printArray(arr, size);
  68. return 0;
  69. }
  70.  
Success #stdin #stdout 0s 4232KB
stdin
Standard input is empty
stdout
Sorted array: 
1 5 6 9 10 12