请大神帮我看看这个归并排序错在哪里???
privatevoidmergeSort(int[]a){intn=a.length;int[]b=null,c=null;while(n>1){b=newint[n/2...
private void mergeSort(int[] a) {
int n = a.length;
int[] b = null, c = null;
while (n > 1) {
b = new int[n / 2];
c = new int[n - n / 2];
for (int i = 0, j = 0; i < n; i++) {
if (i < n / 2) {
b[i] = a[i];
} else {
c[j] = a[i];
j++;
}
}
mergeSort(b);
mergeSort(c);
merge(b, c, a);
}
}
private void merge(int[] b, int[] c, int[] a) {
int i = 0, j = 0, k = 0;
while (i < b.length && j < c.length) {
if (b[i] < c[j]) {
a[k] = b[i];
i++;
} else {
a[k] = c[j];
j++;
}
k++;
}
if (i == b.length) {
for (; j < c.length; j++, k++) {
a[k] = b[j];
}
} else {
for (; i < b.length; i++, k++) {
a[k] = b[i];
}
}
} 展开
int n = a.length;
int[] b = null, c = null;
while (n > 1) {
b = new int[n / 2];
c = new int[n - n / 2];
for (int i = 0, j = 0; i < n; i++) {
if (i < n / 2) {
b[i] = a[i];
} else {
c[j] = a[i];
j++;
}
}
mergeSort(b);
mergeSort(c);
merge(b, c, a);
}
}
private void merge(int[] b, int[] c, int[] a) {
int i = 0, j = 0, k = 0;
while (i < b.length && j < c.length) {
if (b[i] < c[j]) {
a[k] = b[i];
i++;
} else {
a[k] = c[j];
j++;
}
k++;
}
if (i == b.length) {
for (; j < c.length; j++, k++) {
a[k] = b[j];
}
} else {
for (; i < b.length; i++, k++) {
a[k] = b[i];
}
}
} 展开
1个回答
展开全部
追问
真的很感谢,我纠结了很久居然然没有想到返回值,真不好意思,还犯了一些低级错误。。。while(n>1)循环应该没有问题吧,因为n是数组长度
追答
1、每一次递归调用都相当与单独执行一次mergeSort方法。根据你的程序假设一个分支n的值为8、4、2,则第一次调用mergeSort方法时n=8,因为在再次递归之前(调用mergeSort)n的值在循环中没有递减所以while循环就会死循环。
2、你可以使用eclipse调试模式看下。
网易云信
2023-12-06 广告
2023-12-06 广告
网易云信提供一站式的 1 对 1 UIKit 组件库,可以更快地搭建 1 对 1 社交平台,能够快速实现音视频呼叫、音视频通话、1对1消息发送、美颜和礼物功能,直接可以复用我们的组件源码就可以了。优势:1、全套1对1 UI组件,接入更快;2...
点击进入详情页
本回答由网易云信提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询