fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. void merge(int arr[], int l, int m, int r)
  6. {
  7. int i, j, k;
  8. int n1 = m - l + 1;
  9. int n2 = r - m;
  10. int L[n1], R[n2];
  11.  
  12. for (i = 0; i < n1; i++)
  13. L[i] = arr[l + i];
  14. for (j = 0; j < n2; j++)
  15. R[j] = arr[m + 1 + j];
  16.  
  17. i = 0;
  18. j = 0;
  19. k = l;
  20.  
  21. while (i < n1 && j < n2) {
  22. if (L[i] <= R[j]) {
  23. arr[k] = L[i];
  24. i++;
  25. } else {
  26. arr[k] = R[j];
  27. j++;
  28. }
  29. k++;
  30. }
  31.  
  32. while (i < n1) {
  33. arr[k] = L[i];
  34. i++;
  35. k++;
  36. }
  37.  
  38. while (j < n2) {
  39. arr[k] = R[j];
  40. j++;
  41. k++;
  42. }
  43. }
  44.  
  45. void mergeSort(int arr[], int l, int r)
  46. {
  47. if (l < r) {
  48. int m = l + (r - l) / 2;
  49.  
  50. mergeSort(arr, l, m);
  51. mergeSort(arr, m + 1, r);
  52.  
  53. merge(arr, l, m, r);
  54. }
  55. }
  56.  
  57. int main()
  58. {
  59. int n;
  60. printf("Enter the number of elements in the array: ");
  61. scanf("%d", &n);
  62. int arr[n];
  63.  
  64. printf("Enter the elements of the array:\n");
  65. for (int i = 0; i < n; i++) {
  66. scanf("%d", &arr[i]);
  67. }
  68.  
  69. clock_t start_time = clock();
  70. mergeSort(arr, 0, n - 1);
  71. clock_t end_time = clock();
  72.  
  73. printf("Sorted array using merge sort:\n");
  74. for (int i = 0; i < n; i++) {
  75. printf("%d ", arr[i]);
  76. }
  77.  
  78. double time_taken = ((double)(end_time - start_time)) / CLOCKS_PER_SEC;
  79. printf("\nTime taken: %f seconds\n", time_taken);
  80.  
  81. return 0;
  82. }
Success #stdin #stdout 0.01s 5252KB
stdin
5
4 1 9 3 2
stdout
Enter the number of elements in the array: Enter the elements of the array:
Sorted array using merge sort:
1 2 3 4 9 
Time taken: 0.000000 seconds