java中的合并排序
这段代码是一个简单的按分治类推的合并排序。我得到一个未排序的数组作为输出,它与输入数组相同。请指出此代码中的错误:java中的合并排序,java,mergesort,Java,Mergesort,这段代码是一个简单的按分治类推的合并排序。我得到一个未排序的数组作为输出,它与输入数组相同。请指出此代码中的错误: import java.util.*; class Merge { public static void main(String[] args) { int n,i; Scanner sc = new Scanner(System.in); System.out.println("enter size of array");
import java.util.*;
class Merge {
public static void main(String[] args) {
int n,i;
Scanner sc = new Scanner(System.in);
System.out.println("enter size of array");
n = sc.nextInt();
int b[] = new int[n];
System.out.println("enter array");
for (i=0;i<n;i++) {
b[i] = sc.nextInt();
}
System.out.println("sorted array");
int c[] = sort(b);
for (i=0;i<n;i++) {
System.out.println(c[i]);
}
}
static int[] sort(int[] a) {
int i;
int l = a.length;
if (l<2) {
return a;
}
int mid = l/2;
int left[] = new int[mid];
int right[] = new int[l - mid];
for (i=0;i<mid;i++) {
left[i] = a[i];
}
for (i=mid;i<l;i++) {
right[i-mid] = a[i];
}
sort(left);
sort(right);
merge(left,right,a);
return a;
}
static void merge(int[] left , int[] right , int[] a) {
int p=0,q=0,r=0;
while (p<left.length && q<right.length) {
if (left[p]<=left[q]) {
a[r] = left[p];
p++;
} else {
a[r] = right[q];
q++;
}
r++;
}
while (p<left.length) {
a[r] = left[p];
p++;
r++;
}
while (q<right.length) {
a[r] = right[q];
q++;
r++;
}
}
}
import java.util.*;
类合并{
公共静态void main(字符串[]args){
int n,i;
扫描仪sc=新的扫描仪(System.in);
System.out.println(“输入数组大小”);
n=sc.nextInt();
int b[]=新的int[n];
System.out.println(“输入数组”);
对于(i=0;i在合并方法中,您的条件有问题
if (left[p]<=left[q]) {
if(left[p]通过调试器运行它。我建议您使用调试器并尝试自己解决它。这将对您有更多帮助,您也将学到一些有用的东西。
if (left[p]<=right[q]) {