Please help in code reviews for readability, optimizing it, functionality etc.
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.math.BigInteger;
import java.util.ArrayList;
public class Merge {
static BigInteger cntInv = new BigInteger("0");
static void mergeSort(int[] array){
if(array.length > 1){
int[] left = leftArray(array);
int[] right = rightArray(array);
mergeSort(left);
mergeSort(right);
merge(array,left,right);
}
}
static int[] leftArray(int[] array){
int size = array.length/2;
int[] left = new int[size];
for(int i =0 ; i<size;i++){
left[i] = array[i];
}
return left;
}
static int[] rightArray(int[] array){
int mid = array.length/2;
int size = array.length - mid ;
int[] right = new int[size];
for(int i = 0 ; i<size;i++){
right[i] = array[i + mid];
}
return right;
}
static void merge(int[] array, int[] left, int[] right){
int iLeft = 0;
int iRight = 0;
/** Traverse through the array */
for(int i=0;i<array.length;i++){
if(iRight >= right.length || (iLeft<left.length && left[iLeft]<= right[iRight]) ){
array[i] = left[iLeft];
iLeft++;
}else{
if(left.length > 0 && iLeft < left.length) {
cntInv = cntInv.add(BigInteger.valueOf(left.length - iLeft));
}
array[i] = right[iRight];
iRight++;
}
}
}
static void display(int[] array){
for(int i=0; i<array.length; i++){
//System.out.println("Index of " + i + " : " + array[i]);
}
}
private static int[] buildIntArray(ArrayList<Integer> integers) {
int[] ints = new int[integers.size()];
int i = 0;
for (Integer n : integers) {
ints[i++] = n;
}
return ints;
}
public static void main(String args[]) throws NumberFormatException, IOException{
ArrayList<Integer> arrayList = new ArrayList<Integer>();
BufferedReader reader = new BufferedReader(new FileReader("./num_list.txt"));
String line = null;
while ((line = reader.readLine()) != null) {
arrayList.add(Integer.parseInt(line));
}
int[] array = buildIntArray(arrayList); // new int[10];
System.out.println("List of number in the array befor sort");
display(array);
mergeSort(array);
System.out.println("List of number in the array after sort");
display(array);
System.out.println("Done" + cntInv);
}
}