zakładając 1,2,3,3,4,1
jest ważna kolejność sortowania i 2,4,6,8
jest ważna sekwencja (z drugim etapie) jak również, ale nie jest 1,3,5,9
(7 brak) i przy założeniu, że układ wejściowy może zostać zastąpiona,
- określić maksymalne i minimalne: O (n) czas, O (1) spacja. Możesz użyć do tego pierwszej i ostatniej pozycji tablicy.
- określić krok. Krok jest najmniej powszechnym mnożnikiem wszystkich wartości, jeśli są one zbyt oddalone (
max - min > (count + 1) * step
), nie może to być sekwencja. W przeciwnym razie należy wykonać sortowanie liczb całkowitych w miejscu. Do początku> końca:
- Spójrz na pierwszą pozycję. Niech wartość być
v_0
- niech swoją pozycję docelową, gdy zakładamy żadnych duplikatów (
(v_0 - min)/step + start
) być i
- jeśli pozycja docelowa jest mniej niż
start
, to duplikat. Przesuń go do tyłu i zmniejsz wskaźnik końcowy, jeśli pozycja docelowa jest większa niż end
, brakuje jakiegoś elementu w sekwencji. Twierdzenie, że tablica nie jest sekwencją.
- , gdy element znajduje się w położeniu docelowym zwiększyć wskaźnik początku i odniesienia
min
- innego, gdy element w położeniu docelową jest mniejsza niż minimalna odniesienia lub równa
v_0
, wymienić go na koniec tablicy i zmniejsz wskaźnik końcowy. To duplikat.
- Zamień element w docelowej pozycji na
v_0
.
- Zastrzeżenie tablica sekwencja
IN miejscu całkowitą rodzaj O (n).W każdym etapie, że albo:
- skraca szereg wejść i utrzymuje wszystkie elementy posortowane w ich położeniach docelowych lub
- rodzaju jedno lub dwa wcześniej nieposortowane elementów do ich położenia docelowego.
Po zakończeniu sortowania każdy element jest duplikatem w duplikacie bloku lub w poprawnej pozycji w posortowanym bloku.
Należy pamiętać, że krok 3 można pominąć. # 4 poprawnie określi, że nie jest to sekwencja, aczkolwiek wolniejsza.
Jeśli etap jest równy 1, to algorytm można uprościć nieco (patrz wersja # 1)
Krok 2 wykorzystuje przestrzeń O (n). – jbr
Czy to masz na myśli? http://stackoverflow.com/a/18102484/499214 Krok nr 2 brzmi, jakbyś chciał wyjść z przestrzeni "O (1)", alokując nieograniczoną ilość dodatkowej pamięci. –
OK, brakowało miejsca na miejsce – oddparity