Java 合并排序不起作用
Posted
技术标签:
【中文标题】Java 合并排序不起作用【英文标题】:Java mergesort doesn't work 【发布时间】:2018-12-04 20:53:20 【问题描述】:我已经为 java 中的 mergesort(recursive) 编写了代码。我尝试在 IntelliJ 中调试它,但它没有做任何事情
public class Main
public static void main(String[] args)
int[] ar = 20, 35, -15, 7, 55, 1, -22;
mergeSort(ar);
System.out.println(Arrays.toString(ar));
private static void mergeSort(int[] arra)
int l=arra.length;
int mid = l/2;
int[] left= Arrays.copyOfRange(arra,0,mid);
int[] right= Arrays.copyOfRange(arra,mid,l);
mergeSort(left);
mergeSort(right);
merge(left,right,arra);
public static void merge(int[] ll,int[] rr,int[] array)
int nl = ll.length;
int nr = rr.length;
int l=0;int r=0;int a=0;
while(l<=nl && r<= nr)
array[a++]=ll[l]<=rr[r] ? ll[l++] : rr[r++];
if (l<nl)
while (l <= nl)
array[a++] = ll[l++];
if (r<nr)
while (r<=nr)
array[a++] = rr[r++];
问题似乎在第 21 行,即“mergesort(left);”
代码上也没有红色下划线,仍然没有,仍然没有结果。
【问题讨论】:
没有if-else
块是无限循环的完美秘诀。
【参考方案1】:
mergeSort() 中有一个无限循环。在函数内部的代码周围放置一个 if 案例,如下所示:
private static void mergeSort(int[] arra)
if (arra.length > 1)
int l = arra.length;
int mid = l / 2;
int[] left = Arrays.copyOfRange(arra, 0, mid);
int[] right = Arrays.copyOfRange(arra, mid, l);
mergeSort(left);
mergeSort(right);
merge(left, right, arra);
同样在函数 merge() 中将
while (l < nl && r < nr)
array[a++] = ll[l] <= rr[r] ? ll[l++] : rr[r++];
if (l < nl)
while (l < nl)
array[a++] = ll[l++];
if (r < nr)
while (r < nr)
array[a++] = rr[r++];
【讨论】:
以上是关于Java 合并排序不起作用的主要内容,如果未能解决你的问题,请参考以下文章
具有索引合并 + orderby 的 Firebase 不起作用
为啥合并排序用于 Android/Java API 中的对象?
java牛客BM4.合并两个排序的链表 BM5. 合并k个已排序的链表