Shell Sort
Algorytm ten zosta艂 zaproponowany przez Donalda Shella w 1959 roku. Jest to najszybszy algorytm sortuj膮cy w klasie O(n2). Idea jest nast臋puj膮ca: Shell zauwa偶y艂, i偶 algorytm sortowania przez wstawianie (insertion sort) jest bardzo efektywny, gdy zbi贸r jest ju偶 w du偶ej cz臋艣ci uporz膮dkowany. Wtedy z艂o偶ono艣膰 obliczeniowa jest prawie liniowa - O(n). Jednak偶e algorytm ten nieefektywnie przestawia elementy w trakcie sortowania - poniewa偶 por贸wnywane s膮 kolejne elementy na li艣cie uporz膮dkowanej, to ulegaj膮 one przesuni臋ciu tylko o jedn膮 pozycj臋 przy ka偶dym obiegu p臋tli wewn臋trznej. Shell wpad艂 na pomys艂 modyfikacji algorytmu sortowania przez wstawianie tak, aby por贸wnywane by艂y na pocz膮tku elementy odleg艂e od siebie, a p贸藕niej ta odleg艂o艣膰 mala艂a i w ko艅cowej fazie powstawa艂by zwyk艂y algorytm sortowania przez wstawianie, lecz ze zbiorem jest ju偶 w du偶ym stopniu uporz膮dkowanym.
Osi膮gn膮艂 to dziel膮c w ka偶dym obiegu zbi贸r na odpowiedni膮 liczb臋 podzbior贸w, kt贸rych elementy s膮 od siebie odleg艂e o sta艂膮 odleg艂o艣膰 g. Nast臋pnie ka偶dy z podzbior贸w jest sortowany za pomoc膮 sortowania przez wstawianie. Powoduje to cz臋艣ciowe uporz膮dkowanie zbioru. Dalej odleg艂o艣膰 g jest zmniejszana (najcz臋艣ciej o po艂ow臋), zn贸w s膮 tworzone podzbiory (jest ich teraz mniej) i nast臋puje kolejna faza sortowania. Operacje te kontynuujemy a偶 do momentu, gdy odleg艂o艣膰 g osi膮gnie warto艣膰 0. Wtedy zbi贸r wyj艣ciowy b臋dzie uporz膮dkowany.
Zasadniczym czynnikiem wp艂ywaj膮cym na efektywno艣膰 algorytmu sortowania metod膮 Shella jest odpowiedni dob贸r ci膮gu kolejnych odst臋p贸w. Shell zaproponowa艂 przyj臋cie na pocz膮tku odst臋pu r贸wnego po艂owie liczby element贸w w zbiorze, a nast臋pnie zmniejszanie tego odst臋pu o po艂ow臋 przy ka偶dym obiegu p臋tli. Nie jest to najbardziej efektywne rozwi膮zanie, jednak najprostsze w implementacji. Dlatego b臋dziemy z niego korzysta膰.