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