/ / Quicksort Java метод - java, сортиране, бърз достъп

Метод на Quicksort Java - java, сортиране, quicksort

Имам проблем с изхода на този метод:

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);
}