Dekompozycja - sortowanie bąbelkowe

Dekompozycja - sortowanie bąbelkowe
Mr. Moon
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 5 lat
  • Postów:19
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ć ?

Kopiuj
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

Kopiuj
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));		
	}
}
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:4 minuty
  • Postów:4934
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?:

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

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


Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
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.


Mr. Moon
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 5 lat
  • Postów:19
0

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

Kopiuj
	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;
	}
Zobacz pozostały 1 komentarz
Mr. Moon
chyba zrozumiałem o co chodzi ;)
Mr. Moon
W ten sposób? public static boolean isGreaterThan (int[] number, int x, int y) { boolean czyWieksza = false; if (number[x]>number[y]) { czyWieksza = true; } return czyWieksza; }
Patryk27
Prawie, prawie - ta zmienna lokalna nie jest tutaj potrzebna :-)
Mr. Moon
ok, zrobiłem, a co do swap w ten sposób jest ok? public static int swap (int[] number, int i) { int temp = number[i+1]; number[i+1] = number[i]; number[i]=temp; return temp; }
Mr. Moon
OK ZADZIAŁAŁO !!! WIELKIE DZIĘKI ! :)
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:4 minuty
  • Postów:4934
1

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

Kopiuj
    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);
            }
        }
    }

edytowany 1x, ostatnio: lion137
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
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.


Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.