Dekompozycja - sortowanie bąbelkowe

0

Moje zadanie to zdekomponowanie kodu BubbleSort na funkcje, oczywiście w taki sposób by nie zmienić jego działania. Funkcje, które powinny pojawić się w kodzie:

sort - sortuje podaną tablicę
swap - zamienia miejscami dwa elementy w tablicy na wskazanych pozycjach
isGreaterThan - sprawdza czy element na pozycji x jest większy niż element na pozycji y w podanej tablicy
printNumbers - wypisuje aktualne wartości tablicy (w takiej kolejności, w jakiej występują)

Potrzebuję dowiedzieć czy mój tok myślenia jest dobry i jeśli tak to w jaki sposób wywołać napisane funkcje, co zmienić ?

public class BubbleSort {

    public static void main(String[] args) {

        int[] numbers = new int[] { 4, 2, 0, 2, 10, 1, 9, 12, 3, 5 };

        for (int i = 0; i < numbers.length; i++) {
            for (int j = 0; j < numbers.length - 1; j++) {
                if (numbers[j] > numbers[j + 1]) {
                    int temp;
                    temp = numbers[j + 1];
                    numbers[j + 1] = numbers[j];
                    numbers[j] = temp;
                }
            }
        }

        for (int i = 0; i < numbers.length; i++) {
            System.out.println(numbers[i]);
        }
    }
}

KOD zdekomponowany

import java.util.Arrays;

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

        int[] numbers = new int[] { 4, 2, 0, 2, 10, 1, 9, 12, 3, 5 };

        printNumbers(numbers);
    }

    public static void sort(int[] number) {
        Arrays.sort(number);
    }

    public static void swap (int[] number, int i, int temp) {
        temp = number[i+1]; 
        number[i+1] = number[i];
        number[i]=temp;
    }

    public static boolean isGreaterThan (int[] number) {
        for(int i=0; i<number.length; i++) {
            for(int j=0; j<i; j++) {
                if (number[i]>number[i+1]) {
                swap(number, i, j); 
            }
                else {
                return false;   
                }
            }
    }
        return true;
    }

    public static void printNumbers(int[] number) {
            System.out.print(Arrays.toString(number));      
    }
}
0

"isGreaterThan - sprawdza czy element na pozycji x jest większy niż element na pozycji y w podanej tablicy". Czyli ta funkcja ma czytać pozycję dwóch elementów w tablicy i porównywać je. A co robi Twoje isGreaterThan?
A to?:

 public static void sort(int[] number) {
        Arrays.sort(number);
    }

Interesujący sposób zdekomponowania funkcji sortującej:)

1

isGreaterThan - sprawdza czy element na pozycji x jest większy niż element na pozycji y w podanej tablicy

Gdzie masz to zmodelowane u siebie?
Nie widzę, aby metoda isGreaterThan przyjmowała x oraz y.

Dodatkowo nie ma potrzeby, aby metoda swap przyjmowała temp jako parametr - wystarczy zmienna lokalna.

0

Patryk27 w ten sposób jeśli chodzi o metode swap i isGreaterThan?

    public static int swap (int[] number, int i) {
        int temp = number[i+1]; 
        number[i+1] = number[i];
        number[i]=temp;
        return temp;
    }

    public static boolean isGreaterThan (int[] number) {
        int x;
        int y;
        boolean czyWieksza = false;
        for(int i=0; i<number.length; i++) {
            x = number[i];
            y = number[i+1];
            if (x>y) {
                swap(number, x); 
                czyWieksza = true;              
            }
        }
        return czyWieksza;
    }
1

Zgodnie z opisem, powinno to wyglądać tak:

    void sort(int [] numbers){
        for (int i = 0; i < numbers.length; i++) {
            for (int j = 0; j < numbers.length - 1; j++) {
                if (isGreaterThan(j, j + 1, numbers)) 
                    swap(j, j + 1, numbers);
            }
        }
    }
2

Patryk27 w ten sposób jeśli chodzi o metode swap i isGreaterThan?

Pozwól, że zacytuję siebie raz jeszcze:

Nie widzę, aby metoda isGreaterThan przyjmowała x oraz y.

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