java如何合并排序?只是想知道我哪里错了
我开始用java编程,并尝试学习合并排序。我得到了算法并用它编码。我不明白我错了什么地方。有人能帮我理解合并排序和调试这段代码吗
public class Main {
public static void main(String[] args) {
// Merge Sort
int[] myArray = {2, 4, 1, 6, 8, 5, 3, 7};
mergeSort(myArray);
System.out.println((Arrays.toString(myArray)));
}
public static void mergeSort(int []toSortArray){
int n= toSortArray.length;
if (n < 2) {
return;
}
int mid = n/2;
int [] Left= new int [mid];
int []Right = new int[n-mid];
for(int i=0;i<mid-1;i++){
Left[i]=toSortArray[i];
}
for(int i=mid;i<n-1;i++){
Right[i-mid]=toSortArray[i];
}
mergeSort(Left);
mergeSort(Right);
merge(Left,Right,toSortArray);
}
public static void merge(int[] Left, int [] Right, int []SortedArray){
int nL = Left.length;
int nR= Right.length;
int i=0;//Index position for left array
int j=0;// index of position of Right array
int k=0;// Index position of sorted Array
while (i<nL && j<nR){
if (Left[i]<Right[j]) {
SortedArray[k] = Left[i];
i++;
k++;
}
if (Right[j]<Left[i]){
SortedArray[k] = Right[j];
j++;
k++;
}
}
while(i<nL){
SortedArray[k]=Left[i];
i++;
k++;
} while (j<nR){
SortedArray[k]= Right[j];
j++;
k++;
}
}
}
# 1 楼答案
在mergeSort()中,复制数据的两个循环应该是i<;mid(不是i<;mid-1)和i<;n(不是i<;n-1)
在merge()中,第一个if应该是if(Left[i]<;=Right[j])(而不仅仅是<;)。第二个if(Right[j]<;Left[i])可以由一个else替换(不需要第二个if)
以下代码似乎正在工作: