fork download
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. void merge(int input[], int left, int mid, int right);
  5.  
  6. void mergesort(int input[], int left, int right) {
  7. if (left < right) {
  8. int mid = (left + right) / 2;
  9. mergesort(input, left, mid);
  10. mergesort(input, mid + 1, right);
  11. merge(input, left, mid, right);
  12. }
  13. }
  14.  
  15. int sortedarray[1000];
  16.  
  17. void merge(int input[], int left, int mid, int right) {
  18. int leftindex = left;
  19. int rightindex = mid + 1;
  20. int index = left;
  21.  
  22. while (leftindex <= mid && rightindex <= right) {
  23. if (input[leftindex] < input[rightindex]) {
  24. sortedarray[index] = input[leftindex];
  25. leftindex++;
  26. } else {
  27. sortedarray[index] = input[rightindex];
  28. rightindex++;
  29. }
  30. index++;
  31. }
  32.  
  33. while (leftindex <= mid) {
  34. sortedarray[index] = input[leftindex];
  35. index++;
  36. leftindex++;
  37. }
  38. while (rightindex <= right) {
  39. sortedarray[index] = input[rightindex];
  40. index++;
  41. rightindex++;
  42. }
  43.  
  44. if(left < right)
  45. memcpy(input + left, sortedarray + left, sizeof(int) * (right - left + 1));
  46. }
  47.  
  48. int main() {
  49. int i;
  50. int data[] = {1, 2, 9, 7, 9, 4, 10, 100, 99, 77, 1, 1000};
  51.  
  52. mergesort(data, 0, sizeof data / sizeof data[0] - 1);
  53.  
  54. for(i = 0; i < sizeof data / sizeof data[0]; ++i)
  55. printf("%d ", sortedarray[i]);
  56.  
  57. putchar('\n');
  58. return 0;
  59. }
Success #stdin #stdout 0s 3464KB
stdin
Standard input is empty
stdout
1 1 2 4 7 9 9 10 77 99 100 1000