【发布时间】:2017-05-30 18:32:33
【问题描述】:
我重复了很多次,但我不确定我做错了什么。 他的逻辑似乎没问题,但它只打印出第一个数字。我省略了主要方法:
public class MergeSort {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] bob = {4,7,99,8,12,6};
Mergesort(bob);
for(int i=0; i< bob.length; i++){
System.out.print(bob[i]+",");
}
}
public static int[] Mergesort(int[] bob){
int length = bob.length;
int mid = bob.length/2;
if(length <= 1){
return bob;
}
int[] left = new int[mid];
int[] right = new int[length-left.length];
for(int i=0; i< mid; i++){
left[i]=bob[i];
}
for(int j=mid; j< length; j++){
right[j-mid]=bob[j];
}
Mergesort(left);
Mergesort(right);
merge(left,right, bob);
return bob;
}
//this is merge method
public static int[] merge(int[] left, int[] right, int[] bob){
int l= left.length;
int r = right.length;
int i=0, j=0,k=0;
while(i<l && j<r){
if(left[i]<=right[j]){
bob[k] = left[i];
i++;
}
else
{
bob[k] = right[j];
j++;
}
k++;
}
while(i<l){
bob[k] = left[i];
i++;
k++;
}
while(j<r){
bob[k] = bob[j];
j++;
k++;
}
return bob;
}
}
【问题讨论】:
-
第二部分代码
public static int[] merge(int[] left, int[] right, int[] bob){ int l= left.length; int r = right.length; int i=0, j=0,k=0; while(i<l && j<r){ if(left[i]<=right[j]){ bob[k] = left[i]; i++; } else { bob[k] = right[j]; j++; } k++; } while(i<l){ bob[k] = left[i]; i++; k++; } while(j<r){ bob[k] = bob[j]; j++; k++; } return bob; } } -
请将
merge()方法包含在您的实际问题中。 -
@user4660931:您可以使用问题下方的“编辑”链接添加该信息。
-
当我尝试添加合并方法时,stackoverflow 告诉我我的帖子主要是代码,所以我无法发布它..正在尝试修复它
-
@DavidWallace 它没有。