fork(1) download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. void merge(int L[], int left_count, int R[], int right_count, int a[])
  6. {
  7. int i = 0, j = 0, k = 0;
  8.  
  9. while(i < left_count && j < right_count)
  10. {
  11. if(L[i] <= R[j])
  12. a[k] = L[i++];
  13. else
  14. a[k] = R[j++];
  15. k++;
  16. }
  17. if(i == left_count)
  18. memcpy(&a[k], &R[j], sizeof(R[0]) * (right_count - j));
  19. else
  20. memcpy(&a[k], &L[j], sizeof(L[0]) * (left_count - i));
  21. }
  22.  
  23. void mergesort(int a[], int n)
  24. {
  25. int i;
  26. int split = n / 2;
  27. int *L = (int *)malloc(split * sizeof(a[0]));
  28. int *R = (int *)malloc((n - split) * sizeof(a[0]));
  29.  
  30. if(n > 1)
  31. {
  32. for(i = 0; i < split; i++)
  33. L[i] = a[i];
  34. for(i = split; i < n; i++)
  35. R[i - split] = a[i];
  36. mergesort(L, split);
  37. mergesort(R, n - split);
  38. merge(L, split, R, n - split, a);
  39. }
  40. free(L);
  41. free(R);
  42. }
  43.  
  44.  
  45. int main(int argc, char *argv[]){
  46. int i;
  47. const int size = 100;
  48. int v[size];
  49.  
  50. for (i = 0; i < size; ++i)
  51. v[i] = i % 40;
  52.  
  53.  
  54. mergesort(v, size);
  55.  
  56. for(i = 0; i < size; i++)
  57. printf("%d ", v[i]);
  58.  
  59. return 0;
  60. }
Success #stdin #stdout 0s 2300KB
stdin
Standard input is empty
stdout
0 0 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 17 18 18 18 19 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 33 33 33 34 34 35 36 158208768 14 0 209