fork download
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. void mergesort(int[], int, int);
  4. void merge(int[], int, int, int);
  5. void printarray(int[]);
  6.  
  7. int gs;
  8. int main()
  9. {
  10. int* a,i,s;
  11. printf("Enter size of the array\n");
  12. scanf("%d",&s);
  13. a = (int*)calloc(s,sizeof(int));
  14. gs = s;
  15. printf("Enter the array\n");
  16. for(i=0;i<s;i++)
  17. {
  18. scanf("%d",&a[i]);
  19. }
  20.  
  21. printf("Showing the array\n");
  22.  
  23. printarray(a);
  24. printf("\n");
  25.  
  26. mergesort(a,0,s-1);
  27.  
  28. printf("The sorted array is:\n");
  29. printarray(a);
  30.  
  31. free(a);
  32. return 0;
  33. }
  34.  
  35. void mergesort(int a[], int f, int l)
  36. {
  37. int m;
  38. if(f<l)
  39. {
  40. m = (f+l)/2;
  41. mergesort(a,f,m);
  42. mergesort(a,m+1,l);
  43. merge(a,f,m,l);
  44. }
  45. }
  46.  
  47. void merge(int a[], int f, int m, int l)
  48. {
  49. int* t,i,j,h1,h2;
  50. t = (int*)calloc(l-f+1,sizeof(int));
  51. h1 = f;
  52. i = 0;
  53. h2 = m+1;
  54. while(h1 <= m && h2 <= l)
  55. {
  56. if(a[h1] < a[h2])
  57. {
  58. t[i] = a[h1];
  59. h1++;
  60. }
  61. else
  62. {
  63. t[i] = a[h2];
  64. h2++;
  65. }
  66. i++;
  67. }
  68.  
  69. if(h1>m)
  70. {
  71. for(j=h2; j<=l; j++)
  72. {
  73. t[i] = a[j];
  74. i++;
  75. }
  76. }
  77. else
  78. {
  79. for(j=h1; j<=m; j++)
  80. {
  81. t[i] = a[j];
  82. i++;
  83. }
  84. }
  85.  
  86. for(j=f;j<=l;j++)
  87. a[j] = t[j -f];
  88.  
  89. free(t);
  90. printarray(a);
  91. }
  92.  
  93. void printarray(int a[])
  94. {
  95. int i;
  96. for(i=0;i<gs;i++)
  97. printf("%d ",a[i]);
  98. printf("\n");
  99. }
Success #stdin #stdout 0.02s 2816KB
stdin
9
9 8 2 5 1 4 3 6 7
stdout
Enter size of the array
Enter the array
Showing the array
9 8 2 5 1 4 3 6 7 

8 9 2 5 1 4 3 6 7 
2 8 9 5 1 4 3 6 7 
2 8 9 1 5 4 3 6 7 
1 2 5 8 9 4 3 6 7 
1 2 5 8 9 3 4 6 7 
1 2 5 8 9 3 4 6 7 
1 2 5 8 9 3 4 6 7 
1 2 3 4 5 6 7 8 9 
The sorted array is:
1 2 3 4 5 6 7 8 9