To jest odpowiedź do dodatku @perreal. Próbowałem opublikować to jako komentarz, ale jest zbyt długi. @perreal prawidłowo wskazuje, kiedy sortowanie wiadra ma największy sens. Różne odpowiedzi przyjmują różne założenia dotyczące tego, jakie dane są sortowane. NA PRZYKŁAD. jeśli klucze do posortowania są łańcuchami, to zakres możliwych kluczy będzie zbyt duży (większy niż tablica kubełkowa), a będziemy musieli używać tylko pierwszego znaku ciągu dla pozycji kubełka lub innej strategii. Poszczególne segmenty będą musiały być posortowane, ponieważ zawierają elementy z różnymi kluczami, co prowadzi do O (n^2).
Ale jeśli sortujemy dane, w których klucze są liczbami całkowitymi w znanym zakresie, to segmenty są zawsze sortowane, ponieważ klucze w wiadrze są równe, co prowadzi do liniowego sortowania czasu. Nie tylko sortuje się wiadra, ale sortuje się, ponieważ możemy wyciągnąć elementy z tablicy kubełków w kolejności, w jakiej zostały dodane.
Rzeczą, którą chciałem dodać, jest to, że jeśli masz do czynienia z O (n^2) ze względu na naturę kluczy do posortowania, sortowanie kubełkowe może nie być właściwym podejściem. Gdy masz zakres możliwych kluczy proporcjonalny do rozmiaru wejścia, możesz skorzystać z liniowego sortowania kubełków czasowych, ponieważ każdy zasobnik ma tylko jedną wartość klucza.
Niekoniecznie można za każdym razem dodawać do początku listy, podając stałą wydajność 'O (1)'. Jednak tak czy inaczej, będziesz potrzebował ostatecznie * posortować * poszczególne wiadro, które jest (jak sądzę) najgorszym przypadkiem 'O (n^2)' wydajności. – smessing
Moja odpowiedź jest nieco uproszczona - istnieje powód, dla którego nie dodajesz do początku listy, którą dodam w edycji – mfrankli
To jest moje zrozumienie, ale nie jestem w 100% pewny: Odpowiedź wynika z faktu, że bucket-sort jest próbą poprawienia dolnej granicy nlogn dla porównań opartych na sortowaniu. Jeśli dodasz do początku listy, musisz posortować w obrębie każdego segmentu - który przenosi nas z powrotem do górnej/dolnej granicy sortowania opartego na porównaniu. Tak więc bucket-sort chce umieścić elementy w kubełku w kolejności. W przeciętnym przypadku wszystko jest dobrze i dobrze. Ale, próbując pokonać nlogn, pojawia się ten najgorszy możliwy przypadek. Czy ktoś może potwierdzić, że jest to prawda/fałsz? – mfrankli