-3
此代碼是一個簡單的合併按分而治之類比。我得到一個未排序的數組作爲與輸入數組相同的輸出。在您的合併方法合併排序java
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++;
}
}
}
運行:請在此代碼指出錯誤。 – Kayaman
我會建議你使用一個調試器,並試圖找出它自己。這會幫助你更多,你也會學到一些有用的東西。 – UnholySheep