Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Author : Taqui
- * Algorithm Name : Merge Sort
- * Time Complexity : O(n.log(n))
- */
- import java.util.Scanner;
- public class MergeSort {
- public int[] originalList; // saves the main list of data
- public int[] sortedList; // saves the sorted data
- int size; // total number of data
- public MergeSort(int[] originalList) {
- this.originalList = originalList.clone();
- this.sortedList = originalList;
- this.size = originalList.length;
- divide(0, size - 1); // starting merge sort
- }
- public void divide(int low, int high) {
- if (low != high)
- {
- int middle = (low + high) / 2;
- divide(low, middle); // first half
- divide(middle + 1, high); // second half
- merge(low, high); // sort and join both
- }
- }
- public void merge(int low, int high) {
- int demoList[] = new int[(high - low) + 1]; // demo list to hold the merged data after sorting
- int middle = (low + high) / 2;
- int i1 = low, i2 = middle + 1, I = 0;
- // i1 and i2 will iterate through the first list and second list respectively
- // I will iterate through the demo list to merge sorted data
- while (i1 <= middle && i2 <= high) // i1-> 0 to middle, i2-> middle + 1 to last
- {
- if (sortedList[i1] <= sortedList[i2])
- {
- demoList[I++] = sortedList[i1++];
- }
- else
- {
- demoList[I++] = sortedList[i2++];
- }
- }
- // left over of first list
- while (i1 <= middle)
- {
- demoList[I++] = sortedList[i1++];
- }
- // left over of second list
- while (i2 <= high)
- {
- demoList[I++] = sortedList[i2++];
- }
- // copying back the merged data into main list..to merge this with another sorted list
- for (int i = low; i <= high; i++)
- {
- sortedList[i] = demoList[i - low];
- }
- }
- public static void main(String[] args) {
- Scanner read = new Scanner(System.in);
- System.out.print("Size of the List : ");
- int size = read.nextInt();
- int [] array = new int[size];
- for (int i = 0; i < size; i++)
- {
- System.out.print("\nElement " + (i + 1) + ": ");
- array[i] = read.nextInt();
- }
- System.out.print("\nSorted list: ");
- MergeSort ms = new MergeSort(array);
- for (int i : ms.sortedList)
- {
- System.out.print(i + " ");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement