class MergeSort {
public static void mergeSort(int[] array, int low, int high) {//low - 1-ый индекс эл-та в массиве, high - кол-во эл-ов в массиве
if (high - low < 2) {// (0 - кол-во эл-ов массива) в итоге остается кол-во эл-ов в массиве и выполняется проверка, если 1 эл-нт, то функция завершается
return;
}
int mid = (low + high) >>> 1;//деление на 2 то есть кол-во эл-ов делим на 2 и узнаем чему равна половина массива (в коол-ве эл-ов)
mergeSort(array, low, mid);//понял, что это рекурся, но не понимаю,
//как это взаимодейсвует с кодом далее или такго взаимодействия нет + я так думаю, что это разбиение как раз таки массива на мелкие части
mergeSort(array, mid, high);//строка выше
int[] b = Arrays.copyOfRange(array, low, mid);//загружаем основную левую половину массива, но потом не оганяю, как туда загружаются еще и другие части или нет
for (int i = low, j = mid, k = 0; k < b.length; i++) {//вроде как мы обращаемся ко всем индексам массива который зодержит все эл-ты половины основного массива,
//но не шарю зачюм здесь обьявлют еще i = low, j = mid
if (j == high || b[k] <= array[j]) {//тут не понимаю, что значят эти проверки j == high || b[k] <= array[j]
array[i] = b[k++]; // и н могу предствить это визуально, что это
} else {
array[i] = array[j++];// и н могу предствить это визуально, что это
}
}
}
}