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++;
}
}
}
}
}
}
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