VSDevelopers, Algorithms Coliseum

Merge Sort


/*Copyrights to vsdevelopers.io*/
/*For more programs visit vsdevelopers.io */
/*Java program for Merge sort*/
import java.util.Scanner;

public class VSDMergeSort {
	static int size;// size of array
	static int array[];// array of numbers to be sorted

	static void VSDmerge(int l, int r) {
		if (l < r) {
			int m = l + (r - l) / 2;
			// Recursively calling merge method to divide the array
			VSDmerge(l, m);
			VSDmerge(m + 1, r);
			// Combines the divided array pieces in sorted order
			VSDMergesort(l, m, r);
		}
	}

	static void VSDMergesort(int l, int m, int r) {
		// Assigning sizes for temporary arrays
		int n1 = m - l + 1;
		int n2 = r - m;
		// Temporary arrays to sort divided elements
		int Left[] = new int[n1];
		int Right[] = new int[n2];
		// Assigning elements
		for (int i = 0; i < n1; i++)
			Left[i] = array[l + i];
		for (int j = 0; j < n2; j++)
			Right[j] = array[m + 1 + j];
		// Initial indexes to sort elements using temporary arrays
		int i = 0, j = 0;
		// Index for original array
		int k = l;
		// Comparing elements to arrange them in sorted order in original array
		while (i < n1 && j < n2) {
			if (Left[i] <= Right[j]) {
				array[k] = Left[i];
				i++;
			} else {
				array[k] = Right[j];
				j++;
			}
			k++;
		}
		// Arranging remaining elements from left array
		while (i < n1) {
			array[k] = Left[i];
			i++;
			k++;
		}
		// Arranging remaining elements from right array
		while (j < n2) {
			array[k] = Right[j];
			j++;
			k++;
		}

	}

	// Function to take user input
	public static void VSDuserInput() {
		Scanner sc = new Scanner(System.in);
		System.out.println("Enter size");
		size = sc.nextInt();
		array = new int[size];
		System.out.println("Enter numbers to sort:");
		for (int i = 0; i < size; i++) {
			array[i] = sc.nextInt();
		}
	}

//Function to print output
	public static void VSDprintOutput() {
		System.out.println("The sorted order is:");
		for (int i = 0; i < size; i++) {
			System.out.println(array[i]);
		}
	}

	public static void main(String args[]) {
		VSDuserInput();// Taking user input
		VSDmerge(0, size - 1);// Calling merge for the entire array
		VSDprintOutput();// Printing output
	}
}

loader