fork download
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. struct node {
  5. int value;
  6. struct node *next;
  7. };
  8.  
  9. void mergesort(struct node **n);
  10.  
  11. void mergesort(struct node **n) {
  12. struct node *n1;
  13. struct node *n2;
  14. struct node *n3;
  15.  
  16. if (*n == NULL || (*n)->next == NULL) {
  17. return;
  18. }
  19.  
  20. n1 = *n;
  21. n2 = n1->next;
  22.  
  23. while (n2->next != NULL && n2->next->next != NULL) {
  24. n1 = n1->next;
  25. n2 = n2->next->next;
  26. }
  27.  
  28. n2 = n1->next;
  29. n1->next = NULL;
  30. n1 = *n;
  31.  
  32. mergesort(&n1);
  33. mergesort(&n2);
  34.  
  35. if (n1->value >= n2->value) {
  36. *n = n1;
  37. n1 = n1->next;
  38. } else {
  39. *n = n2;
  40. n2 = n2->next;
  41. }
  42.  
  43. n3 = *n;
  44.  
  45. while (1) {
  46. if (n1 == NULL) {
  47. n3->next = n2;
  48. break;
  49. }
  50.  
  51. if (n2 == NULL) {
  52. n3->next = n1;
  53. break;
  54. }
  55.  
  56. if (n1->value >= n2->value) {
  57. n3->next = n1;
  58. n1 = n1->next;
  59. } else {
  60. n3->next = n2;
  61. n2 = n2->next;
  62. }
  63.  
  64. n3 = n3->next;
  65. }
  66. }
  67.  
  68. int main(void) {
  69. struct node *head = NULL;
  70. struct node *tail = NULL;
  71. struct node *n;
  72. int i;
  73.  
  74. for (i = 0; i < 100; i++) {
  75. n = malloc(sizeof(struct node));
  76. n->value = (int)(rand() / (RAND_MAX + 1.0) * 1000 + 1);
  77. n->next = NULL;
  78.  
  79. if (head == NULL) {
  80. head = n;
  81. tail = n;
  82. } else {
  83. tail->next = n;
  84. tail = n;
  85. }
  86. }
  87.  
  88. mergesort(&head);
  89.  
  90. i = 1;
  91. n = head;
  92. while (n != NULL) {
  93. printf("%3d : %4d\n", i, n->value);
  94. n = n->next;
  95. i++;
  96. }
  97.  
  98. while (head != NULL) {
  99. n = head;
  100. head = head->next;
  101. free(n);
  102. }
  103.  
  104. return 0;
  105. }
Success #stdin #stdout 0.01s 1808KB
stdin
Standard input is empty
stdout
  1 :  999
  2 :  973
  3 :  971
  4 :  957
  5 :  953
  6 :  950
  7 :  932
  8 :  931
  9 :  924
 10 :  920
 11 :  917
 12 :  912
 13 :  911
 14 :  903
 15 :  894
 16 :  892
 17 :  891
 18 :  881
 19 :  859
 20 :  851
 21 :  841
 22 :  840
 23 :  830
 24 :  815
 25 :  808
 26 :  805
 27 :  799
 28 :  784
 29 :  772
 30 :  770
 31 :  769
 32 :  761
 33 :  739
 34 :  721
 35 :  718
 36 :  688
 37 :  687
 38 :  685
 39 :  668
 40 :  664
 41 :  658
 42 :  640
 43 :  638
 44 :  636
 45 :  629
 46 :  613
 47 :  607
 48 :  589
 49 :  554
 50 :  540
 51 :  532
 52 :  527
 53 :  526
 54 :  525
 55 :  514
 56 :  513
 57 :  513
 58 :  494
 59 :  478
 60 :  458
 61 :  441
 62 :  440
 63 :  438
 64 :  401
 65 :  401
 66 :  399
 67 :  395
 68 :  376
 69 :  365
 70 :  355
 71 :  353
 72 :  351
 73 :  349
 74 :  336
 75 :  331
 76 :  297
 77 :  293
 78 :  285
 79 :  284
 80 :  278
 81 :  267
 82 :  243
 83 :  239
 84 :  229
 85 :  219
 86 :  198
 87 :  193
 88 :  166
 89 :  157
 90 :  142
 91 :  138
 92 :  130
 93 :  109
 94 :   87
 95 :   70
 96 :   65
 97 :   64
 98 :   40
 99 :   21
100 :   17