Привет ребят, делаю сортировку слиянием вместе с рекурсией и столкнулся с такой проблемой что я выхожу за пределы массива, как исправить?

public static void main(String[] args) {
    double dat[] = {8.0, -35.0, -14.0, 25.0, -3.0, 1.0, 2.0, 4.0, 20.0, 30.0};
    String name[] = {"HdX", "Mxk", "HsD", "EjI", "ZCK", "HdX", "Mxk", "HsD", "EjI", "ZCK"};
    softSales(dat, name);

}



private static void printData(String[] names, double[] data) {
    System.out.print("{");
    for (int i = 0; i < data.length; i++) {
        System.out.print(names[i] + ": " + data[i] + ", ");
    }
    System.out.println("\b\b}");
}

public static void softSales(double dat[], String []name) {
    double leftDat[] = new double[dat.length / 2];
    double rightDat[] = new double[dat.length - leftDat.length];
    String leftName[] = new String[name.length/2];
    String rightName[] = new  String[name.length - leftName.length];
    for (int i = 0; i < dat.length; i++) {
        if (i < leftDat.length) {
            leftDat[i] = dat[i];
            leftName[i] = name[i];
        }else {
            rightDat[i - leftDat.length] = dat[i];
            rightName[i - leftName.length] = name[i];
        }
    }if (rightDat.length > 1 && rightName.length > 1){
    softSales(leftDat, leftName);
    softSales(rightDat, rightName);
    }
    int leftID = 0;
    int rightId = 0;
    int leftID1 = 0;
    int rightId1 = 0;
    for (int i = 0; i < dat.length; i++) {
        if (leftID == leftDat.length && rightId < rightDat.length &&leftID1 == leftName.length && rightId1 < rightName.length  ) {
            name[i] = rightName[rightId1];
            dat[i] = rightDat[rightId++];
        }else if (rightId == rightDat.length && leftID< leftDat.length &&  rightId1 == rightName.length && leftID1 < leftName.length ){
            name[i] = leftName[leftID1];
            dat[i] = leftDat[leftID++];
        }else
        dat[i] = (leftDat[leftID] < rightDat[rightId])?leftDat[leftID++]:rightDat[rightId++];
        name[i]= (leftDat[leftID] < rightDat[rightId])?leftName[leftID1++] : rightName[rightId1++];




    }
    printData(name, dat);
}
}

Ответы (0 шт):