You have a bug in the following line.
if (i2 >= right.length || (i1 < left.length &&
left[i1].compareToIgnoreCase(right[i1])<0)) {
The index into the array right
should be i2
not i1
.
if (i2 >= right.length || (i1 < left.length &&
left[i1].compareToIgnoreCase(right[i2])<0)) {