```public class Sortowanie {
/**
* @param args the command line arguments
*/
public void czytaj_dane(int[]liczba){
liczba[0] = 3;
liczba[1] = 5;
liczba[2] = 1;
liczba[3] = 9;
liczba[4] = 6;
liczba[5] = 7;
for(int i = 0; i < liczba.length; i++){
System.out.print(liczba[i] + ",");
}
}
public void przetworz_dane(int[]liczba){
int tmp;
for(int i = 1; i <= liczba.length -1; i++ ){
if(liczba[i] > liczba[i+1]){
tmp = liczba[i];
liczba[i] = liczba[i + 1];
liczba[i + 1] = tmp;
}
}
}
public void wyswietl_wyniki(int[]liczba){
for(int i = 1; i < liczba.length; i++){
System.out.println(liczba[i]);
}
}
public static void main(String[] args) {
// TODO code application logic here
int[] liczba = new int[6];
Sortowanie sort = new Sortowanie();
sort.czytaj_dane(liczba);
sort.przetworz_dane(liczba);
sort.wyswietl_wyniki(liczba);
}
}
Piszę projekt w Javie (uczę się od podstaw i dla treningu) Sortowanie (plany rozbudowy z klasami dziedziczacymi ktore beda meic wlasne metody sortowania)
Niestety już na samym początku mam problem z metodą przetworz_dane - nie działa i nie rozumiem dlaczego. algorytm sortowania bąbelkowego wydaje mi się, że poprawnie napisany. może brakuje drugiej pętli j ? ale jeśli tak - nie rozumiem,dlaczego powinna być druga. Bardzo proszę o pomoc i wyjaśnienie co nie działa i dlaczego
LoOpY_99 napisał(a):
algorytm sortowania bąbelkowego wydaje mi się, że poprawnie napisany. może brakuje drugiej pętli j ?
Masz rację - wydaje Ci się ;) Zwróć uwagę, że już na start pomijasz pierwszy element. Poza tym, twoja pętla przejdzie po tablicy raz i koniec. W ten sposób jej nie przesortujesz, a co najwyżej przestawisz kilka elementów.
Patrz przykład jak powinno to sortowanie wyglądać : Sortowanie
W skrócie, tworzysz zmienna pomocniczą, która sprawdza czy po przejściu całej tablicy wystąpiła chociaż jedna zmiana - jeśli nie, to tablica jest posortowana.
Lukaspar napisał(a):
LoOpY_99 napisał(a):
algorytm sortowania bąbelkowego wydaje mi się, że poprawnie napisany. może brakuje drugiej pętli j ?
Masz rację - wydaje Ci się ;) Zwróć uwagę, że już na start pomijasz pierwszy element. Poza tym, twoja pętla przejdzie po tablicy raz i koniec. W ten sposób jej nie przesortujesz, a co najwyżej przestawisz kilka elementów.
Patrz przykład jak powinno to sortowanie wyglądać : Sortowanie
W skrócie, tworzysz zmienna pomocniczą, która sprawdza czy po przejściu całej tablicy wystąpiła chociaż jedna zmiana - jeśli nie, to tablica jest posortowana.
można również tą metodę poprawić w taki sposób i również działa poprawnie i daje taki sam wynik, jak wg tego llinku co dodales ;) czyli już rozumiem co było źle i dlaczego, a to najważniejsze ;)
``` public void przetworz_dane(int[]liczba){
int tmp;
for(int j = 0; j < liczba.length-1; j++){
for(int i = 0; i < liczba.length -1; i++ ){
if(liczba[i] > liczba[i+1]){
tmp = liczba[i];
liczba[i] = liczba[i + 1];
liczba[i + 1] = tmp;
}
}
}
}