fork(2) download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void merge(int* A, int n, int mid){
  5. int *temp = (int*)malloc(sizeof(int)*n);
  6. //set indexes for left and right side of array and
  7. //the beginning of the temporary array
  8. int array_index = 0; //temporary array
  9. int left = 0; //left side
  10. int right = mid;
  11.  
  12. while(left < mid && right < n){
  13. if(A[left] <= A[right]){
  14. temp[array_index] = A[left];
  15. left++;
  16. array_index++;
  17. }else {
  18. temp[array_index] = A[right];
  19. right++;
  20. array_index++;
  21. }
  22. }
  23. while(left < mid){
  24. temp[array_index] = A[left];
  25. left++;
  26. array_index++;
  27. }
  28. while(right< n){
  29. temp[array_index] = A[right];
  30. right++;
  31. array_index++;
  32. }
  33. for(int i = 0; i<n; i++){
  34. A[i] = temp[i];
  35. }
  36. free(temp);
  37. }
  38.  
  39. void merge_sort(int *A, int n){
  40. if(n>=2){
  41. int mid = n/2;
  42. merge_sort(A,mid);
  43. merge_sort(A+mid,n-mid);
  44. merge(A, n, mid);
  45. }
  46. }
  47.  
  48. int main(void) {
  49. int arr[10] = {1,5,3,13,88,21,55,23,99,1};
  50. merge_sort(arr, 10);
  51. for(int i = 0; i<10; i++){
  52. printf("%d ",arr[i]);
  53. }
  54. return 0;
  55. }
Success #stdin #stdout 0s 4180KB
stdin
Standard input is empty
stdout
1 1 3 5 13 21 23 55 88 99