提问人:DJ PRAGO_28 提问时间:9/1/2023 最后编辑:DJ PRAGO_28 更新时间:9/1/2023 访问量:35
java 中显示零的 MergeSort 函数
MergeSort function in java displaying zeroes
问:
我遵循了 java 中关于 mergesort 算法的教程,结果显示0000002468。
我输入了 1,2,3...9,0 中的数字。 它应该按升序排序。 我也仔细检查了教程,没有发现任何问题。 我自己无法解决,因为我真的不明白。 顺便说一句,教程是由 BroCode 编写的。
法典:
class m{
public static void main(String[]args){
int array[] = {8,4,5,3,2,7,1,9,0,6};
mergeSort(array);
for(int i =0;i<array.length;i++){
System.out.print(array[i] + "");
}
}
private static void mergeSort(int[]array){
int length = array.length;
if(length<=1)return;//base case
int middle = length/2;
int leftArray[] = new int[middle];
int rightArray[] = new int[length-middle];
int i=0;//left array
int j = 0;//right array
for(;i<length;i++){
if(i<middle){
leftArray[i] = array[i];
}else{
rightArray[j] = array[i];
}
}mergeSort(leftArray);
mergeSort(rightArray);
merge(leftArray,rightArray,array);
}
private static void merge(int[]leftArray,int[]rightArray,int[]array){
int leftSize = array.length/2;
int rightSize = array.length-leftSize;
int i=0,l=0,r=0;
// check conditions for merging
while(l<leftSize && r<rightSize){
if(leftArray[l]<rightArray[r]){
array[i] = leftArray[l];
i++;
l++;
}else{
array[i] = rightArray[r];
i++;
r++;
}
}
while(l<leftSize){
array[i] = leftArray[l];
i++;
l++;
}
while(r<rightSize){
array[i] = rightArray[r];
i++;
r++;
}
}
}
答:
2赞
hermit
9/1/2023
#1
在将原始数组分解为 2 时,您忘记递增索引。j
else{
rightArray[j++] = array[i];
}
在代码中,您只是一次又一次地设置和替换数组的第一个元素。rightArray
评论