fork(7) download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. void mergeSort(int list[], int lowerBound, int upperBound);
  5. void merge(int list[], int lowerBound, int upperBound, int mid);
  6.  
  7. int main(void) {
  8. int a[]={7,4,2,19,5};
  9. int i;
  10. mergeSort(a,0,4);
  11. for(i=0;i<5;i++)
  12. cout<<a[i]<<"\n";
  13. return 0;
  14. }
  15.  
  16. void mergeSort(int list[], int lowerBound, int upperBound)
  17. {
  18. int mid;
  19.  
  20. if (upperBound > lowerBound)
  21. {
  22. mid = ( lowerBound + upperBound) / 2;
  23. mergeSort(list, lowerBound, mid);
  24. mergeSort(list, mid + 1, upperBound);
  25. merge(list, lowerBound, upperBound, mid);
  26. }
  27. }
  28. void merge(int list[], int lowerBound, int upperBound, int mid)
  29. {
  30. int* leftArray = NULL;
  31. int* rightArray = NULL;
  32. int i, j, k;
  33. int n1 = mid - lowerBound + 1;
  34. int n2 = upperBound - mid;
  35. leftArray = new int[n1];
  36. rightArray = new int[n2];
  37. for (i = 0; i < n1; i++)
  38. leftArray[i] = list[lowerBound + i];
  39. for (j = 0; j < n2; j++)
  40. rightArray[j] = list[mid + 1 + j];
  41.  
  42. i = 0;
  43. j = 0;
  44. k = lowerBound;
  45.  
  46. while (i < n1 && j < n2)
  47. {
  48. if (leftArray[i] <= rightArray[j])
  49. {
  50. list[k] = leftArray[i];
  51. i++;
  52. }
  53. else
  54. {
  55. list[k] = rightArray[j];
  56. j++;
  57. }
  58.  
  59. k++;
  60. }
  61.  
  62. while (i < n1)
  63. {
  64. list[k] = leftArray[i];
  65. i++;
  66. k++;
  67. }
  68.  
  69. while (j < n2)
  70. {
  71. list[k] = rightArray[j];
  72. j++;
  73. k++;
  74. }
  75.  
  76. delete [] leftArray;
  77. delete [] rightArray;
  78. }
  79.  
Success #stdin #stdout 0s 3472KB
stdin
Standard input is empty
stdout
2
4
5
7
19