[Algorytmy] Sortowanie tablicy

errryk
Użytkownik
Użytkownik
Posty: 4
Rejestracja: 22 lip 2010, o 03:09
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 3 razy

[Algorytmy] Sortowanie tablicy

Post autor: errryk »

Hej,
wiecie może w jaki sposób poprzestawiać elementy tablicy liczb całkowitych o wielkości \(\displaystyle{ 2 \cdot n}\) w taki sposób, by każdy element o indeksie \(\displaystyle{ n + 1}\) i wiekszym był wiekszy lub równy od dowolnego elementu którego indeks należy do przedziału \(\displaystyle{ [1, n]}\).

Domyślam się, że algorytm ze złożonoscią kwadratową mógłby wyglądać tak, że n razy znajdowałbym element najwiekszy. Szukam jednak czegoś mniej kosztownego.

Z góry dzięki za pomoc
Ostatnio zmieniony 18 lut 2013, o 10:39 przez Afish, łącznie zmieniany 1 raz.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania. Całe wyrażenia matematyczne umieszczaj w tagach [latex] [/latex].
arcan
Użytkownik
Użytkownik
Posty: 106
Rejestracja: 17 gru 2012, o 23:56
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 7 razy
Pomógł: 31 razy

[Algorytmy] Sortowanie tablicy

Post autor: arcan »

Rekurencyjnie, jeśli stabilne to mergesort, a jeśli nie stabilne to quicksort. Po poslku to sortowanie przez scalanie i sortowanie szybkie. Te drugie wydaje się szybsze dla bardziej 'losowych' liczb.
Złośoność \(\displaystyle{ O(n)=n \log n}\)
Otrzymaną tablice 2n dzielisz na dwa i ta druga połówka to rozwiązanie problemu. Jak chcesz to mogę ci napisać mergesort w c++ :mrgreen:
witekkq
Użytkownik
Użytkownik
Posty: 145
Rejestracja: 16 lis 2007, o 09:06
Płeć: Mężczyzna
Lokalizacja: Gniezno
Podziękował: 2 razy
Pomógł: 27 razy

[Algorytmy] Sortowanie tablicy

Post autor: witekkq »

W sumie fakt pasuje każdy algorytm sortowania z mniejszą złożonością, chociaż w sumie pewnikiem można byłoby je zmodyfikować aby nie sortowały tego co mają w lewej połówce.

Albo podzielić tablice na dwie na początku posortować dwie niezależnie np. hepsortem i wymienić elementy większe z prawej na mniejsze z lewej..


m-2
Użytkownik
Użytkownik
Posty: 55
Rejestracja: 4 maja 2011, o 13:37
Płeć: Mężczyzna
Podziękował: 2 razy
Pomógł: 14 razy

[Algorytmy] Sortowanie tablicy

Post autor: m-2 »

Wystarczy znaleźć \(\displaystyle{ n}\)-ty co do wielkości element tablicy (w \(\displaystyle{ O(n)}\): , a następnie przelecieć przez tablicę i podzielić ją na dwie części względem tego elementu.
errryk
Użytkownik
Użytkownik
Posty: 4
Rejestracja: 22 lip 2010, o 03:09
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 3 razy

[Algorytmy] Sortowanie tablicy

Post autor: errryk »

Ha, i właśnie czegoś takiego jak algorytm selekcji szukałem Wielkie dzięki.
Awatar użytkownika
Mariusz M
Użytkownik
Użytkownik
Posty: 6909
Rejestracja: 25 wrz 2007, o 01:03
Płeć: Mężczyzna
Lokalizacja: 53°02'N 18°35'E
Podziękował: 2 razy
Pomógł: 1246 razy

[Algorytmy] Sortowanie tablicy

Post autor: Mariusz M »

Tak się podniecacie tym quicksortem chociaż ma on złożoność \(\displaystyle{ O\left( n^2\right)}\)
norwimaj
Użytkownik
Użytkownik
Posty: 5101
Rejestracja: 11 mar 2011, o 16:31
Płeć: Mężczyzna
Lokalizacja: 52°16'37''N 20°52'45''E
Podziękował: 4 razy
Pomógł: 1001 razy

[Algorytmy] Sortowanie tablicy

Post autor: norwimaj »

arcan pisze:Rekurencyjnie, jeśli stabilne to mergesort,
Co rozumiesz przez "stabilnie" w kontekście tego zadania?
arcan pisze:Złośoność \(\displaystyle{ O(n)=n \log n}\)
Co ma oznaczać taka dziwna równość z \(\displaystyle{ O}\) po lewej stronie?
ODPOWIEDZ