Anonymous
Что я сделал неправильно в этом алгоритме сортировки слиянием в Java
Сообщение
Anonymous » 04 ноя 2024, 19:20
Код: Выделить всё
class FirstClass {
public static void divide(int[] arr) {
if(arr.length == 1) {
return;
}
int mid = arr.length/2;
int[] leftHalf = new int[mid];
int[] rightHalf = new int[arr.length - mid];
for(int i = 0; i < mid; i++) {
leftHalf[i] = arr[i];
}
for(int i = mid; i < arr.length; i++) {
rightHalf[i - mid] = arr[i];
}
divide(leftHalf);
divide(rightHalf);
merge(arr, leftHalf, rightHalf);
}
public static void merge(int[] arr, int[] leftHalf, int[] rightHalf) {
int i = 0, j = 0, k = 0;
while(i < leftHalf.length && j < rightHalf.length) {
if(leftHalf[i] < rightHalf[j]) {
arr[k] = leftHalf[i];
i++;
} else {
arr[k] = rightHalf[j];
j++;
}
k++;
}
while(i < leftHalf.length) {
arr[k] = leftHalf[i];
k++; i++;
}
while(j < rightHalf.length) {
arr[k] = rightHalf[j];
k++; j++;
}
System.out.println(Arrays.toString(arr));
}
public static void main(String[] args) {
int[] arr = {1,3,6,8,3,0,6};
divide(arr);
}
}
Я писал этот алгоритм сортировки слиянием, который работает нормально, но печатал что-то вроде: -
[3, 6]
[1, 3, 6]
[3, 8]
[0, 6]
[0, 3, 6, 8]
[0, 1, 3, 3, 6, 6, 8]
Последним он печатает правильный отсортированный массив, но также печатает еще несколько массивов, и я не знаю, как это исправить.
Подробнее здесь:
https://stackoverflow.com/questions/787 ... hm-in-java
1730737227
Anonymous
[code]class FirstClass { public static void divide(int[] arr) { if(arr.length == 1) { return; } int mid = arr.length/2; int[] leftHalf = new int[mid]; int[] rightHalf = new int[arr.length - mid]; for(int i = 0; i < mid; i++) { leftHalf[i] = arr[i]; } for(int i = mid; i < arr.length; i++) { rightHalf[i - mid] = arr[i]; } divide(leftHalf); divide(rightHalf); merge(arr, leftHalf, rightHalf); } public static void merge(int[] arr, int[] leftHalf, int[] rightHalf) { int i = 0, j = 0, k = 0; while(i < leftHalf.length && j < rightHalf.length) { if(leftHalf[i] < rightHalf[j]) { arr[k] = leftHalf[i]; i++; } else { arr[k] = rightHalf[j]; j++; } k++; } while(i < leftHalf.length) { arr[k] = leftHalf[i]; k++; i++; } while(j < rightHalf.length) { arr[k] = rightHalf[j]; k++; j++; } System.out.println(Arrays.toString(arr)); } public static void main(String[] args) { int[] arr = {1,3,6,8,3,0,6}; divide(arr); } } [/code] Я писал этот алгоритм сортировки слиянием, который работает нормально, но печатал что-то вроде: - [3, 6] [1, 3, 6] [3, 8] [0, 6] [0, 3, 6, 8] [0, 1, 3, 3, 6, 6, 8] Последним он печатает правильный отсортированный массив, но также печатает еще несколько массивов, и я не знаю, как это исправить. Подробнее здесь: [url]https://stackoverflow.com/questions/78759565/what-i-have-done-wrong-in-this-merge-sort-algorithm-in-java[/url]