Имам проблем с изхода на този метод:
static void quickSort(int[] ar) {
ArrayList<Integer> left = new ArrayList<Integer>();
ArrayList<Integer> equal = new ArrayList<Integer>();
ArrayList<Integer> right = new ArrayList<Integer>();
int num = ar[0];
for (int i = 0; i < ar.length; i++) {
if (ar[i] < num) {
left.add(ar[i]);
} else if (ar[i] > num) {
right.add(ar[i]);
} else {
equal.add(ar[i]);
}
}
int[] l = listToArray(left);
int[] e = listToArray(equal);
int[] r = listToArray(right);
ArrayList<Integer> combined = new ArrayList<Integer>();
combined.addAll(left);
combined.addAll(equal);
combined.addAll(right);
int[] c = listToArray(combined);
if (l.length > 1) {
quickSort(l);
}
if (r.length > 1) {
quickSort(r);
}
printArray(c);
}
Вход (stdin)
7
5 8 1 3 7 9 2
Вашият изход (stdout)
2 3
1 3 2
7 8 9
1 3 2 5 8 7 9
Очакван резултат
2 3
1 2 3
7 8 9
1 2 3 5 7 8 9
Отговори:
0 за отговор № 1Има няколко неща, които се объркат. 1) За бързото сортиране трябва да сортирате наляво и надясно, преди да ги комбинирате обратно в комбинирания масив.
2) Комбинираният.addAll () не се държи според очакванията. Когато имах {2,3}, той ги добавя в обратен ред. Ето, прехвърлих стойностите в ръководството за цикли.
3) За да може quickSort да върне стойностите си, те трябва да бъдат презаредени обратно в първоначалния параметър или върнати като стойност. Запълних ги в първоначалния параметър.
static void quickSort(Integer[] ar) {
ArrayList<Integer> left = new ArrayList<Integer>();
ArrayList<Integer> equal = new ArrayList<Integer>();
ArrayList<Integer> right = new ArrayList<Integer>();
int num = ar[0];
for (int i = 0; i < ar.length; i++) {
if (ar[i] < num) {
left.add(ar[i]);
} else if (ar[i] > num) {
right.add(ar[i]);
} else {
equal.add(ar[i]);
}
}
Integer[] l = new Integer[0];
l = left.toArray(l);
Integer[] e = new Integer[0];
e = equal.toArray(e);
Integer[] r = new Integer[0];
r = right.toArray(r);
if (l.length > 1) {
quickSort(l);
}
if (r.length > 1) {
quickSort(r);
}
ArrayList<Integer> combined = new ArrayList<Integer>();
for(int ai = 0; ai < l.length; ai++)
{
combined.add(l[ai]);
}
for(int ai = 0; ai < e.length; ai++)
{
combined.add(e[ai]);
}
for(int ai = 0; ai < r.length; ai++)
{
combined.add(r[ai]);
}
combined.toArray(ar);
//printArray(ar);
System.out.println(combined);
}