void mergeSubArrays(int array[], int idxL, int idxM, int idxR){
int lenL = idxM - idxL + 1;
// copy array to arrayL and arrayR
for(i1 = 0; i1 < lenL; i1++){
L[i1] = array[idxL + i1];
for(i2 = 0; i2 < lenR; i2++){
R[i2] = array[idxM + i2 + 1];
while( i1 < lenL && i2 < lenR){
// put the lase elements to array
void mergeSort(int array[], int idxL, int idxR){
// seperate to sub arrays
int m = idxL + (idxR - idxL) /2 ;
mergeSort(array, idxL, m);
mergeSort(array, m + 1, idxR);
mergeSubArrays(array, idxL, m, idxR);