fork download
  1. #include<iostream>
  2. #include<cmath>
  3. using namespace std;
  4.  
  5. int n;
  6.  
  7. void mergesort(int a[], int p, int r);
  8. int *merge(int a[], int p, int q, int r);
  9.  
  10. int main() {
  11.  
  12. cout<<"Enter n: ";
  13. cin>>n;
  14. int a[n];
  15. cout<<"Enter array "<<n<<" elements: ";
  16.  
  17. for(int i=0; i<n; i++) cin>>a[i];
  18.  
  19. mergesort(a,0,n-1);
  20.  
  21. for(int i=0; i<n; i++) cout<<a[i]<<" ";
  22. cout<<endl;
  23.  
  24. return 0;
  25. }
  26.  
  27.  
  28. int *merge(int a[], int p, int q, int r) {
  29. int lenb = q-p+1, lenc = r-q;
  30. int b[lenb], c[lenc], indexb = 0, indexc = 0;
  31.  
  32. for(int i=0,j=p; i<lenb; i++,j++) b[i] = a[j];
  33.  
  34. for(int i=0,j=q+1; i<lenc; i++,j++) c[i] = a[j];
  35.  
  36. for(int k=p; k<=r; k++) {
  37. if(indexb != lenb and indexc != lenc) {
  38. if(b[indexb] < c[indexc]) {
  39. a[k] = b[indexb];
  40. indexb++;
  41. } else {
  42. a[k] = c[indexc];
  43. indexc++;
  44. }
  45. } else {
  46. if(indexb == lenb) {
  47. a[k] = c[indexc];
  48. indexc++;
  49. } else {
  50. a[k] = b[indexb];
  51. indexb++;
  52. }
  53. }
  54. }
  55.  
  56. return a;
  57. }
  58.  
  59.  
  60. void mergesort(int a[], int p, int r) {
  61. if(p<r) {
  62. int q = (p+r)/2;
  63. mergesort(a,p,q);
  64. mergesort(a,q+1,r);
  65. merge(a,p,q,r);
  66. }
  67. }
  68.  
Success #stdin #stdout 0s 3344KB
stdin
10
8 6 9 2 10 1 4 5 3 7
stdout
Enter n: Enter array 10 elements: 1 2 3 4 5 6 7 8 9 10