MergeSort.java 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. // Java program for Merge Sort
  2. // https://www.geeksforgeeks.org/merge-sort/
  3. import java.io.*;
  4. class MergeSort {
  5. // Merges two subarrays of arr[].
  6. // First subarray is arr[l..m]
  7. // Second subarray is arr[m+1..r]
  8. static void merge(int arr[], int l, int m, int r)
  9. {
  10. // Find sizes of two subarrays to be merged
  11. int n1 = m - l + 1;
  12. int n2 = r - m;
  13. // Create temp arrays
  14. int L[] = new int[n1];
  15. int R[] = new int[n2];
  16. // Copy data to temp arrays
  17. for (int i = 0; i < n1; ++i)
  18. L[i] = arr[l + i];
  19. for (int j = 0; j < n2; ++j)
  20. R[j] = arr[m + 1 + j];
  21. // Merge the temp arrays
  22. // Initial indices of first and second subarrays
  23. int i = 0, j = 0;
  24. // Initial index of merged subarray array
  25. int k = l;
  26. while (i < n1 && j < n2) {
  27. if (L[i] <= R[j]) {
  28. arr[k] = L[i];
  29. i++;
  30. }
  31. else {
  32. arr[k] = R[j];
  33. j++;
  34. }
  35. k++;
  36. }
  37. // Copy remaining elements of L[] if any
  38. while (i < n1) {
  39. arr[k] = L[i];
  40. i++;
  41. k++;
  42. }
  43. // Copy remaining elements of R[] if any
  44. while (j < n2) {
  45. arr[k] = R[j];
  46. j++;
  47. k++;
  48. }
  49. }
  50. // Main function that sorts arr[l..r] using
  51. // merge()
  52. static void sort(int arr[], int l, int r)
  53. {
  54. if (l < r) {
  55. // Find the middle point
  56. int m = l + (r - l) / 2;
  57. // Sort first and second halves
  58. sort(arr, l, m);
  59. sort(arr, m + 1, r);
  60. // Merge the sorted halves
  61. merge(arr, l, m, r);
  62. }
  63. }
  64. // A utility function to print array of size n
  65. static void printArray(int arr[])
  66. {
  67. int n = arr.length;
  68. for (int i = 0; i < n; ++i)
  69. System.out.print(arr[i] + " ");
  70. System.out.println();
  71. }
  72. // Driver code
  73. public static void main(String args[])
  74. {
  75. int arr[] = { 12, 11, 13, 5, 6, 7 };
  76. System.out.println("Given array is");
  77. printArray(arr);
  78. sort(arr, 0, arr.length - 1);
  79. System.out.println("\nSorted array is");
  80. printArray(arr);
  81. }
  82. }