fork download
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4.  
  5. void mergesort_(int a[], int b[], int l, int r);
  6. void mergesort(int a[], int n);
  7.  
  8. void mergesort_(int a[], int b[], int l, int r) {
  9. int c;
  10. int i;
  11. int j;
  12. int k;
  13. int n;
  14.  
  15. if (l >= r) {
  16. return;
  17. }
  18.  
  19. c = ((r - l) >> 1) + l;
  20. mergesort_(a, b, l, c);
  21. mergesort_(a, b, c + 1, r);
  22.  
  23. j = 0;
  24. for (i = l; i <= c; i++) {
  25. b[j] = a[i];
  26. j++;
  27. }
  28.  
  29. i = 0;
  30. k = c + 1;
  31. n = l;
  32.  
  33. while (k <= r) {
  34. if (j <= i) {
  35. return;
  36. }
  37.  
  38. if (b[i] <= a[k]) {
  39. a[n] = b[i];
  40. n++;
  41. i++;
  42. } else {
  43. a[n] = a[k];
  44. n++;
  45. k++;
  46. }
  47. }
  48.  
  49. while (i < j) {
  50. a[n] = b[i];
  51. n++;
  52. i++;
  53. }
  54. }
  55.  
  56. void mergesort(int a[], int n) {
  57. int *b = calloc(n >> 1, sizeof(int));
  58. mergesort_(a, b, 0, n - 1);
  59. free(b);
  60. }
  61.  
  62. int main(void) {
  63. FILE *fin;
  64. char buf[256];
  65. char *token;
  66. int nums[10];
  67. int i;
  68.  
  69. fin = fopen("numbers.dat", "r");
  70. fgets(buf, 256, fin);
  71. fclose(fin);
  72.  
  73. token = strtok(buf, " ");
  74. for (i = 0; i < 10; i++) {
  75. nums[i] = atoi(token);
  76. token = strtok(NULL, " ");
  77. }
  78.  
  79. mergesort(nums, 10);
  80.  
  81. for (i = 0; i < 10; i++) {
  82. printf("%d ", nums[i]);
  83. }
  84.  
  85. return 0;
  86. }
Runtime error #stdin #stdout 0.02s 1848KB
stdin
Standard input is empty
stdout
Standard output is empty