Merge Sort

PHOTO EMBED

Sun Jan 12 2025 17:55:29 GMT+0000 (Coordinated Universal Time)

Saved by @wayneinvein

public class _5 {
    public static void main(String[] args) {
        int arr[] = {6, 2, 1, 5, 7, 8, 0, 9};
        int low = 0;
        int high = arr.length - 1;

        ms(arr, low, high);

        for (int e : arr) {
            System.out.print(e + " ");
        }
    }

    static void ms(int arr[], int low, int high) {
        if (low < high) {
            int mid = (low + high) / 2;
            ms(arr, low, mid);       // Sort left half
            ms(arr, mid + 1, high); // Sort right half
            merge(arr, low, mid, high);
        }
    }

    static void merge(int arr[], int low, int mid, int high) {
        int[] arr2 = new int[arr.length]; // Temporary array for merging
        int i = low;      // Starting index for left subarray
        int j = mid + 1;  // Starting index for right subarray
        int k = low;      // Starting index to store merged values

        // Merge the two subarrays into arr2
        while (i <= mid && j <= high) {
            if (arr[i] < arr[j]) {
                arr2[k] = arr[i];
                i++;
            } else {
                arr2[k] = arr[j];
                j++;
            }
            k++;
        }

        // Copy remaining elements of left subarray, if any
        while (i <= mid) {
            arr2[k] = arr[i];
            i++;
            k++;
        }

        // Copy remaining elements of right subarray, if any
        while (j <= high) {
            arr2[k] = arr[j];
            j++;
            k++;
        }

        // Copy merged elements back to the original array
        for (int x = low; x <= high; x++) {
            arr[x] = arr2[x];
        }
    }
}
content_copyCOPY