Merge Sort
Wed Nov 06 2024 17:30:58 GMT+0000 (Coordinated Universal Time)
Saved by @login123
import java.util.Scanner;
public class Merge {
public void merge(int arr[], int l, int m, int r) {
int[] left = new int[m - l + 1];
int[] right = new int[r - m];
// Copy data into left[] and right[]
System.arraycopy(arr, l, left, 0, left.length);
System.arraycopy(arr, m + 1, right, 0, right.length);
int i = 0, j = 0, k = l;
// Merge the left and right arrays back into arr[]
while (i < left.length && j < right.length) {
if (left[i] <= right[j]) {
arr[k++] = left[i++];
} else {
arr[k++] = right[j++];
}
}
// Copy remaining elements of left[], if any
while (i < left.length) {
arr[k++] = left[i++];
}
// Copy remaining elements of right[], if any
while (j < right.length) {
arr[k++] = right[j++];
}
}
public void sort(int arr[], int l, int r) {
if (l < r) {
int mid = (l + r) / 2;
sort(arr, l, mid);
sort(arr, mid + 1, r);
merge(arr, l, mid, r);
}
}
public static void display(int[] arr) {
for (int num : arr) {
System.out.print(num + " ");
}
System.out.println();
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Prompt user for array size
System.out.print("Enter the size of the array: ");
int n = scanner.nextInt();
// Create array and input elements
int[] arr = new int[n];
System.out.println("Enter " + n + " elements:");
for (int i = 0; i < n; i++) {
arr[i] = scanner.nextInt();
}
System.out.println("Original array:");
display(arr);
// Perform merge sort
new Merge().sort(arr, 0, arr.length - 1);
System.out.println("Sorted array:");
display(arr);
scanner.close();
}
}
Algorithm:
Algorithm MergeSort(low, high)
// a[low : high] is a global array to be sorted.
// Small(P) is true if there is only one element to sort.
// In this case, the list is already sorted.
if (low < high) then
// Step 1: Divide the problem into subproblems
{
mid := ⌊(low + high) / 2⌋; // Find where to split the set
// Step 2: Solve the subproblems
MergeSort(low, mid);
MergeSort(mid + 1, high);
// Step 3: Combine the solutions
Merge(low, mid, high);
}
}
Algorithm Merge (low, mid, high)
k := low; i := low; j := mid + 1;
while ((i ≤ mid) and (j ≤ high)) do
if (a[i] ≤ a[j]) then
{
b[k] := a[i]; i := i + 1;
}
else
{
b[k] := a[j]; j := j + 1;
}
k := k + 1;
end
if (i > mid) then
for k := j to high do
{
b[k] := a[k]; i := i + 1;
}
else
for k := i to mid do
{
b[k] := a[k]; i := i + 1;
}
for k := low to high do a[k] := b[k];
OUTPUT:
Enter the size of the array: 5
Enter 5 elements:
10
3
6
2
9
Original array:
10 3 6 2 9
Sorted array:
2 3 6 9 10



Comments