Skip to content

Instantly share code, notes, and snippets.

@arjunrao87
Created December 21, 2014 20:56
Show Gist options
  • Save arjunrao87/5095a5eda62689b50aa7 to your computer and use it in GitHub Desktop.
Save arjunrao87/5095a5eda62689b50aa7 to your computer and use it in GitHub Desktop.
Mergesort
public void sort( int[] numbers ){
mergesort( numbers );
}
public void mergesort( int[] numbers ){
if( numbers.length > 1 ){
int[] leftHalf = splitLeft( numbers );
int[] rightHalf = splitRight( numbers );
mergesort( leftHalf );
mergesort( rightHalf );
merge( numbers, leftHalf, rightHalf );
}
}
public int[] splitLeft( int[] numbers ){
int[] left = new int[numbers.length/2];
for ( int i = 0; i < numbers.length/2; i++ ){
left[i] = numbers[i];
}
return left[i];
}
public int[] splitRight( int[] numbers ){
int[] right = new int[numbers - (numbers.length/2)];
for ( int i = numbers.length/2; i < right.length; i++ ){
right[i] = numbers[i];
}
return right[i];
}
public int[] merge( int[] numbers, int[] leftHalf, int[] rightHalf ){
int left = 0;
int right = 0;
for( int i = 0; i< numbers.length; i++){
if( right>rightHalf.length || ( left < leftHalf.length && leftHalf[left]<=rightHalf[right] ) ){
result[i] = leftHalf[left];
left++;
} else{
result[i] = rightHalf[right];
right++;
}
}
return result;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment