Algorytm sortowania

0

Jestem poczatkujacym w javie i chcialem napisac algorytm sortowania wlasnej roboty, ale nie wiedziec czemu nie wykonuje on jednej instrukcji. Nie mam pojecia dlaczego, prosze o pomoc. Po wpisaniu liczb 2, 1, 4, 5, 3, po pierwszej petli wychodzi wynik 1, 1, 4, 5, 3, zaś po drugiej 1, 1, 4, 3, 3, a po trzeciej ostatniej 1, 1, 3, 3, 3.

import java.util.Scanner;

public class sorting {
    public static void main(String [] args) {

        int[] zbiorLiczb = new int[5]; //tablica glowna
        int[] pomocnik;                 //tablica pomocnicza
        boolean czyKoniec = false;      //warunek konca petli while



        for (int i = 0; i <= 4; i++) {     //wpisywanie liczb do glownej tablicy
            zbiorLiczb[i] = getInt();
        }

        pomocnik = zbiorLiczb;          //klon tablicy glownej

        while (czyKoniec == false) {
            for (int i = 0; i <= 4; i++) {               //sortowanie od najmniejszej do najwiekszej
                if (i == zbiorLiczb.length - 1) {       //ostatni element tablicy zostaje pominiety
                    break;
                } else {
                    if (zbiorLiczb[i] > zbiorLiczb[i + 1]) { //sprawdzanie czy nastepna liczba jest wieksza od poprzedniej
                        pomocnik[i] = zbiorLiczb[i + 1];    //ustalanie poprawnej kolejnosci w tablic pomocniczej
                        pomocnik[i + 1] = zbiorLiczb[i];    //(instrukcja nie chce sie wykonac lub zostaje nadpisana)|||   jezeli nastepna                                                                 //liczba jest mniejsza od poprzedniej to zamieniane sa miejscami
                        break;
                    } else {
                        pomocnik[i] = zbiorLiczb[i];    //jezeli kolejnosc jest poprawna nic sie nie zmienia
                    }
                }
            }

            for (int i = 0; i <= 4; i++) {               //sprawdza czy to juz koniec algorytmu
                if (i == zbiorLiczb.length - 1) {       //sprawdza poprawnosc kolejnosci pomijajac ostatni element
                    break;
                } else {
                    if (pomocnik[i] <= pomocnik[i + 1]) {
                        czyKoniec = true;
                    } else {
                        czyKoniec = false;
                        break;
                    }
                }
            }

            zbiorLiczb = pomocnik;  //zapisywanie zmian w tabeli glownej
            for (int i = 0; i<=4; i++) {    //wypisanie aktualnej kolejnosci
                System.out.print(pomocnik[i] + ", ");
            }
            System.out.println("kolejna runda");
        }

            for (int i = 0; i <= 4; i++) {          //wypisywanie liczb ostatecznych
                System.out.println(pomocnik[i]);
            }
        }
        
    public static int getInt() {
        return new Scanner(System.in).nextInt();
    }
}
0

Debuggowałeś go krok po kroku?

0

Błąd jest m.in. w linijce 17 i 47

Zastanawiałeś się w ogóle po co ci ta druga referencja do tablicy (która nie jest klonem)

0
opiszon napisał(a):

Błąd jest m.in. w linijce 17 i 47

Zastanawiałeś się w ogóle po co ci ta druga referencja do tablicy (która nie jest klonem)

a mozesz wytlumaczyc czemu to jest blad? Nie do konca rozumiem. Czesc linijek jest zbedna, ale to wynika ze zmian idei na ten kod, w trakcie pisania

1

Poczytaj o tablicach w javie, jak działają referencje.

1

Po prostu pomocnik i zbiorLiczb to ta sama tablica a nie jej klon. Nie potrzebujesz w ogóle klonować tutaj, popraw tylko zamianę elementów

kappa napisał(a):

chcialem napisac algorytm sortowania wlasnej roboty

zaimplementowałeś po prostu sortowanie bąbelkowe

0

słodki jeżu, co to jest?

2

Obsługa debuggera na początku jest istotniejsza niż umiejętność implementacji własnych algorytmów sortowania ;)
Just sayin aczkolwiek plus za chęci ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1