/ / Java 2d array i Bucket sort - java, sortowanie, tablica wielowymiarowa, sortowanie w wiadrze

Java 2d array i Bucket sort - java, sortowanie, tablica wielowymiarowa, sortowanie wiadro

Pracuję nad zadaniem, w którym musimy wziąć tablicę liczb całkowitych i posortować ją za pomocą sortowania w wiadrze.

Mój problem pojawia się, gdy próbuję przejść do następnej kolumny, ale tylko wtedy, gdy element jest już w „wiadrze”.

Tak więc, używając mojej tablicy poniżej, 22 jest pierwszym elementemi przejdzie do wiersza 2 kolumny 0, co jest poprawne, ale użycie i jako kolumny jest oczywiście niepoprawne, ponieważ zawsze zwiększa kolumnę i ostatecznie otrzymuję indeks poza granicami.

Nie potrafię pojąć głowy, jak to zrobić poprawniezwiększyć indeks kolumny bucketArray, tylko jeśli na tej pozycji znajduje się element. Próbowałem użyć dodatkowej pętli for, która obsługuje kolumnę, ale to też nie działa.

Wszelkie wskazówki we właściwym kierunku byłybymile widziane! Jestem pewien, że istnieją również inne sposoby tworzenia sortowania zasobników, ale przypisanie mówiło, że dla każdego zasobnika używa się tablicy 2d, więc starałem się, aby to działało w ten sposób.

public class BucketSort {

public static void main(String args[]) {
int intArray[] = {22, 45, 12, 8, 10, 6, 72, 81, 33, 18, 50, 14};
int eachBucket[][] = new int[10][11];
int j;
double max = 81;
int min = 6;
int divider = (int)Math.ceil((max + 1) / 10);

for(int i = 0; i < intArray.length; i++) {
j = (int)Math.floor(intArray[i] / divider);
eachBucket[j][i] = intArray[i];
}
}
}

Odpowiedzi:

1 dla odpowiedzi № 1

Użyj jedenastego elementu, aby śledzić, ile elementów w bieżącym zasobniku zostało użytych, coś w tym stylu

   for(int i = 0; i < intArray.length; i++) {
j = (int)Math.floor(intArray[i] / divider);
eachBucket[j][eachBucket[j][10]] = intArray[i];
eachBucket[j][10]++;
}

Problem z drugim wymiarem o stałym rozmiarze polega na tym, że masz więcej niż n elementów do umieszczenia w jednym wiadrze. Prawdopodobnie nie ma tu problemu.