fork(1) download
  1. #include<iostream>
  2. using namespace std;
  3. void merge(int data[], int size, int first, int mid, int last);
  4.  
  5. void mergeSort(int data[], int size, int first /*low*/, int last/*high*/)
  6. {
  7. if(first<last-1) // do it if there are more than one lement
  8. {
  9. //sort each half
  10. int mid = (first + last)/2;
  11. //index of midpoint
  12. //sort left half the array [first .... mid-1]
  13. mergeSort(data, size, first, mid);
  14. //sort right half of the array [mid ..... last-1]
  15. mergeSort(data, size, mid, last);
  16. //merge the two halves
  17. merge(data, size, first, mid, last);
  18. }
  19. }
  20.  
  21. void merge(int data[], int size, int first, int mid, int last)
  22. {
  23. int tempArr[size];
  24.  
  25. for(int i = 0; i < size; ++i)
  26. tempArr[i] = data[i];
  27.  
  28. int i=first;
  29. int j=mid;
  30. int k=first;
  31.  
  32. while (i<mid && j<last)
  33. {
  34. if (tempArr[i] <= tempArr[j])
  35. {
  36. data[k]=tempArr[i];
  37. i++;
  38. }
  39. else
  40. {
  41. data[k] = tempArr[j];
  42. ++j;
  43. }
  44. ++k;
  45. }
  46.  
  47. while (i < mid)
  48. {
  49. data[k] = tempArr[i];
  50. ++k;
  51. ++i;
  52. }
  53. while (j < last)
  54. {
  55. data[k] = tempArr[j];
  56. ++k;
  57. ++j;
  58. }
  59. }
  60.  
  61. int main()
  62. {
  63. const int size = 10;
  64. int arr[size] = {1, 0, 6, 15, 30, 56, 23, 3, 7, 10};
  65. mergeSort(arr, size, 0, size);
  66. for(int i=0; i<size; i++)
  67. {
  68. cout<< arr[i]<<" ";
  69. }
  70. return 0;
  71. }
Success #stdin #stdout 0s 3456KB
stdin
Standard input is empty
stdout
0 1 3 6 7 10 15 23 30 56