Skip to content

Instantly share code, notes, and snippets.

@biskandar
Created October 18, 2016 20:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save biskandar/9d0d23549746ccc70047164848dde58c to your computer and use it in GitHub Desktop.
Save biskandar/9d0d23549746ccc70047164848dde58c to your computer and use it in GitHub Desktop.
Java: Merge Sort 2
package introalgo.chap2;
import java.util.Random;
public class MergeSort2 {
static int[] init( int max ) {
int[] data = new int[max];
Random random = new Random();
for (int i = 0; i < data.length; i++) {
data[i] = 100 + random.nextInt(900);
}
return data;
}
static void print( int[] data ) {
for (int i = 0; i < data.length; i++) {
System.out.printf("%d ", data[i]);
}
System.out.println();
}
static void merge( int[] data , int p , int q , int r ) {
int lenLeft = q - p + 1;
int lenRight = r - q;
int[] dataLeft = new int[lenLeft];
int[] dataRight = new int[lenRight];
for (int i = 0; i < lenLeft; i++) {
dataLeft[i] = data[p + i];
}
for (int i = 0; i < lenRight; i++) {
dataRight[i] = data[1 + q + i];
}
// System.out.print("l: " + dataLeft.length + ": ");
// print(dataLeft);
// System.out.print("r: " + dataRight.length + ": ");
// print(dataRight);
for (int i = 0, j = 0, k = p; k <= r; k++) {
// System.out.printf("%d %d %d \n", k, i, j);
if ((i < dataLeft.length) && (j < dataRight.length)) {
if (dataLeft[i] <= dataRight[j]) {
data[k] = dataLeft[i];
i = i + 1;
} else {
data[k] = dataRight[j];
j = j + 1;
}
} else {
if (i < dataLeft.length) {
data[k] = dataLeft[i];
i = i + 1;
}
if (j < dataRight.length) {
data[k] = dataRight[j];
j = j + 1;
}
}
} // for (int i = 0, j = 0, k = p; k <= r; k++) {
}
static void mergesort( int[] data , int p , int r ) {
// print(data);
if (p >= r) {
// stop here
return;
}
int q = (p + r) / 2;
mergesort(data, p, q);
mergesort(data, q + 1, r);
System.out.printf("%d,%d,%d: ", p, q, r);
for (int i = p; i <= r; i++) {
System.out.printf("%d ", data[i]);
}
System.out.print(" -> ");
merge(data, p, q, r);
for (int i = p; i <= r; i++) {
System.out.printf("%d ", data[i]);
}
System.out.println();
}
public static void main( String[] args ) {
int[] data = init(10);
print(data);
// merge(data, 1, 1, 2);
// print(data);
// merge(data, 0, 1, 2);
// print(data);
mergesort(data, 0, data.length - 1);
print(data);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment