Jestem nowicjuszem w Javie i próbowałem wdrożyć mergesort w Javie. Jednak nawet po kilkakrotnym uruchomieniu programu, zamiast żądanego posortowanego wyjścia, otrzymuję ten sam użytkownik, który otrzymał dane wejściowe jako dane wyjściowe. Byłbym wdzięczny, gdyby ktoś pomógł mi zrozumieć to nieoczekiwane zachowanie.Mergesort w java
import java.io.*;
import java.util.Arrays;
public class MergeSort {
public static void main(String[] args) throws IOException{
BufferedReader R = new BufferedReader(new InputStreamReader(System.in));
int arraySize = Integer.parseInt(R.readLine());
int[] inputArray = new int[arraySize];
for (int i = 0; i < arraySize; i++) {
inputArray[i] = Integer.parseInt(R.readLine());
}
mergeSort(inputArray);
for (int j = 0; j < inputArray.length; j++) {
System.out.println(inputArray[j]);
}
}
static void mergeSort(int[] A) {
if (A.length > 1) {
int q = A.length/2;
int[] leftArray = Arrays.copyOfRange(A, 0, q);
int[] rightArray = Arrays.copyOfRange(A,q+1,A.length);
mergeSort(leftArray);
mergeSort(rightArray);
A = merge(leftArray,rightArray);
}
}
static int[] merge(int[] l, int[] r) {
int totElem = l.length + r.length;
int[] a = new int[totElem];
int i,li,ri;
i = li = ri = 0;
while (i < totElem) {
if ((li < l.length) && (ri<r.length)) {
if (l[li] < r[ri]) {
a[i] = l[li];
i++;
li++;
}
else {
a[i] = r[ri];
i++;
ri++;
}
}
else {
if (li >= l.length) {
while (ri < r.length) {
a[i] = r[ri];
i++;
ri++;
}
}
if (ri >= r.length) {
while (li < l.length) {
a[i] = l[li];
li++;
i++;
}
}
}
}
return a;
}
}
pan przeszedł przez użyciem debuggera? –
Obawiam się, nie wiem, jak używać jednego (dla java). Czy możesz mi coś zasugerować? – tinker
Jeśli używasz Eclipse, użyj wbudowanego. http://www.vogella.com/articles/EclipseDebugging/article.html –