#java #arrays #mergesort
Вопрос:
Основная функция с двумя массивами, передаваемыми в функции mergeSort, один исходный массив и 2-й временный массив для хранения в нем отсортированных значений.
Я получаю вывод в качестве временного = [3 2 6 4 7 8 5 8 1] когда я печатаю temp в основной функции после сортировки слиянием.
static void main(String args[]) { int arr[] = {6,4,7,8,5,3,2,8,1}; int temp[] = new int[arr.length]; for(int i=0;ilt;arr.length();i ) { temp[i] = arr[i]; } mergeSort(arr, temp, 0, arr.length-1); for(int num : temp) { System.out.print(num " ") } } //merge function comparing array and assigning to a new temp array. static void merge(int arr[],int temp[], int l, int mid, int r) { int i = l; int j = mid 1; int index=l; while(ilt;=mid amp;amp; jlt;=r) { if(arr[i]lt;=arr[j]) { temp[index] = arr[i]; i ; } else { temp[index] = arr[j]; j ; } index ; } while(ilt;=mid) { temp[index] = arr[i]; i ; index ; } while(jlt;=r) { temp[index] = arr[j]; j ; index ; } } //mergeSort function static void mergeSort(int arr[],int temp[], int l, int r) { if(llt;r) { int mid = l (r-l)/2; mergeSort(arr,temp,l,mid); mergeSort(arr,temp,mid 1,r); merge(arr,temp,l,mid,r); } }
Я передал два массива в функции mergeSort. Один из них является оригинальным, arr
а второй- temp
массивом, в котором я храню отсортированные элементы.
Ответ №1:
В вашем merge
случае arr
необходимо каждый раз переназначать , иначе предыдущий результат слияния бесполезен. (Это всегда тот же самый arr, с которого вы начали)
static void merge(int arr[],int temp[], int l, int mid, int r) { int i = l; int j = mid 1; for (int k = l; k lt; r 1; k ) { arr[k] = temp[k]; } int index=l; while(ilt;=mid amp;amp; jlt;=r) { if(arr[i]lt;=arr[j]) { temp[index] = arr[i]; i ; } else { temp[index] = arr[j]; j ; } index ; } while(ilt;=mid) { temp[index] = arr[i]; i ; index ; } while(jlt;=r) { temp[index] = arr[j]; j ; index ; } }