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];
}
}
}
Comments