Na forum 4programmers.net korzystamy z plików cookies. Część z nich jest niezbędna do funkcjonowania
naszego forum, natomiast wykorzystanie pozostałych zależy od Twojej dobrowolnej zgody, którą możesz
wyrazić poniżej. Klikając „Zaakceptuj Wszystkie” zgadzasz się na wykorzystywanie przez nas plików cookies
analitycznych oraz reklamowych, jeżeli nie chcesz udzielić nam swojej zgody kliknij „Tylko niezbędne”.
Możesz także wyrazić swoją zgodę odrębnie dla plików cookies analitycznych lub reklamowych. W tym celu
ustaw odpowiednio pola wyboru i kliknij „Zaakceptuj Zaznaczone”. Więcej informacji o technologii cookie
znajduje się w naszej polityce prywatności.
Jestem w trakcie nauki z programowania w JAVA. Zastanawiam się nad rozwiązaniem jednego zadania - "Napisz program w języku Java, aby zmienić rozmieszczenie wszystkich elementów danej tablicy liczb całkowitych, tak aby wszystkie liczby nieparzyste znalazły się przed wszystkimi liczbami parzystymi". Prosiłbym Państwa o propozycje rozwiązań.
Przecież to proste zadanie – masz posortować zbiór liczb, więc musisz skorzystać z algorytmu sortującego. Różnica polega na tym, że porównanie liczb musi brać pod uwagę ich parzystość, a nie wielkość.
Weźmy dla przykładu najprostsze sortowanie, czyli bąbelkowe, w podstawowym wariancie. Przykładowa implementacja:
Kopiuj
procedure Sort(var ANumbers: TNumbers);var
I, J, Temp: Integer;beginfor I :=0to High(ANumbers)dofor J := I to High(ANumbers)doif ANumbers[I]> ANumbers[J]thenbegin
Temp := ANumbers[I];
ANumbers[I]:= ANumbers[J];
ANumbers[J]:= Temp;end;end;
Jak widać w tym przykładzie, warunek sprawdza, czy pierwsza z sąsiadujących liczb jest większa od drugiej i jeśli tak – zamienia je miejscami. Aby algorytm pasował do Twojego zadania, wystarczy zmienić warunek na taki, aby sprawdzał czy pierwsza liczba jest nieparzysta i jeśli tak – ma być przesunięta dalej:
Kopiuj
procedure Sort(var ANumbers: TNumbers);var
I, J, Temp: Integer;beginfor I :=0to High(ANumbers)dofor J := I to High(ANumbers)doifnot Odd(ANumbers[I])thenbegin
Temp := ANumbers[I];
ANumbers[I]:= ANumbers[J];
ANumbers[J]:= Temp;end;end;
Taki wynik byłby nieprawidłowy – 2 musi być z przodu. Możesz rozgonić parzyste do jednej listy i nieparzyste do drugiej, a potem dodać nieparzyste na koniec listy parzystych i taką macierz zwrócić.
To co podałem to tylko przykład rozganiania liczb nieparzystych na lewo i parzystych na prawo. Aby oba podzbiory również były posortowane (np. najpierw nieparzyste liczby rosnąco, a następnie parzyste rosnąco), trzeba dodatkowych operacji.
2
musi być z przodu. Możesz rozgonić parzyste do jednej listy i nieparzyste do drugiej, a potem dodać nieparzyste na koniec listy parzystych i taką macierz zwrócić.1,3,7,2,5
jestn,n,n,p,n