Sunday, 31 July 2016

MERGE SORT IN JAVA

import java.io.*;
import java.util.Arrays;
import java.util.Scanner;

public class MergeSort {

    public static void main(String[] args) throws IOException{
    Scanner scanner = new Scanner(System.in);
        System.out.println("Enter number of elements");
        int size = scanner.nextInt();
        int[] data = new int[size];
        System.out.println("Enter " + size + " integers");
        for (int i = 0; i < size; i++) {
            data[i] = scanner.nextInt();
        }
        Divide(data);

        for (int j = 0; j < data.length; j++) {
            System.out.println(data[j]);
        }

    }

    public static void Divide(int[] A) {
    //divides into two equal halves
        if (A.length > 1) {
            int q = A.length/2;
            int[] leftArray = Arrays.copyOfRange(A, 0, q);
            int[] rightArray = Arrays.copyOfRange(A,q,A.length);
           
            //Logic for recursive division
            Divide(leftArray);
            Divide(rightArray);
            //Combine after every right array division complete
            combine(A,leftArray,rightArray);
        }
    }

    public static void combine(int[] a, int[] l, int[] r) {
        int totallength = l.length + r.length;
        int i, li, ri;
        i = li = ri = 0;
        while ( i < totallength) {
            if ((li < l.length) && (ri < r.length)) {
                if (l[li] < r[ri]) {
                //left array copies
                    a[i] = l[li];
                    i++;
                    li++;
                }
                else {
                //right array copied
                    a[i] = r[ri];
                    i++;
                    ri++;
                }
            }
            else {
                if (li >= l.length) {
                //right array copied
                    while (ri < r.length) {
                        a[i] = r[ri];
                        i++;
                        ri++;
                    }
                }
                if (ri >= r.length) {
                //left array copied
                    while (li < l.length) {
                        a[i] = l[li];
                        li++;
                        i++;
                    }
                }
            }
        }

    }

}

No comments:

Post a Comment