Skip to content

Instantly share code, notes, and snippets.

@rangalo
Created August 23, 2010 08:12
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 rangalo/545058 to your computer and use it in GitHub Desktop.
Save rangalo/545058 to your computer and use it in GitHub Desktop.
merge sort java
class MergeSort {
public void sort(int[] arr) {
if (null == arr || arr.length == 0) {
return;
}
merge_sort(arr);
}
private void merge_sort(int[] arr) {
if(arr.length == 1) {
return;
}
int[] leftarr = new int[arr.length/2];
System.arraycopy(arr,0,leftarr,0,leftarr.length);
int[] rightarr = new int[arr.length - leftarr.length];
System.arraycopy(arr,leftarr.length,rightarr,0,rightarr.length);
// recursion
// sort the left array
merge_sort(leftarr);
// sor the right array
merge_sort(rightarr);
// merge the two arrays together
merge(leftarr,rightarr,arr);
}
private void merge(int[] left, int[] right, int[] arr) {
int[] tmpArray = new int[arr.length];
int leftpos = 0;
int rightpos = 0;
int tmppos = 0;
while(leftpos < left.length && rightpos < right.length) {
if(left[leftpos] < right[rightpos]) {
tmpArray[tmppos] = left[leftpos];
leftpos++;
} else {
tmpArray[tmppos] = right[rightpos];
rightpos++;
}
tmppos++;
}
// copy the rest of the left array
while(leftpos < left.length) {
tmpArray[tmppos] = left[leftpos];
tmppos++;
leftpos++;
}
// copy the rest of the right array
while(rightpos < right.length) {
tmpArray[tmppos] = right[rightpos];
tmppos++;
rightpos++;
}
for(int i=0; i < arr.length; i++) {
arr[i] = tmpArray[i];
}
}
public static void main(String[] args) {
int[] intArr = new int[] {1,60,10,2,7,90,100,35};
System.out.println("Before ----------");
for(int val: intArr) {
System.out.println(val);
}
MergeSort msort = new MergeSort();
msort.sort(intArr);
System.out.println("After ----------");
for(int val : intArr) {
System.out.println(val);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment