Bieżemy pod uwagę liczbę odczytów i zapisów elementu tablicy. Aby wykonać sortowanie bąbelkowe, potrzebujesz dostępu (początkowy zapis do końca, a następnie, w najgorszym przypadku, dwa odczyty i dwa zapisy do wykonania n zamiany). Aby przeprowadzić wyszukiwanie binarne, potrzebujemy 2 log n + 2 n + 1 ( 2 log n dla wyszukiwania binarnego, a następnie, w najgorszym przypadku, 2 n, aby przesunąć elementy tablicy w prawo, a następnie 1, aby zapisać element tablicy do jego właściwe położenie).1 + 4 nn2 logn + 2 n + 12 logn2 n
Tak więc obie metody mają tę samą złożoność dla implementacji tablic, ale metoda wyszukiwania binarnego wymaga na dłuższą metę mniejszego dostępu do tablicy ... asymptotycznie, o połowę mniej. W grę wchodzą oczywiście inne czynniki.
W rzeczywistości można użyć lepszych implementacji i liczyć tylko rzeczywiste dostępy do tablicy (nie dostęp do elementu, który ma zostać wstawiony). Możesz zrobić dla sortowania bąbelkowego i zalogować n + 2 n + 1 dla wyszukiwania binarnego ... więc jeśli dostęp do rejestru / pamięci podręcznej jest tani, a dostęp do tablicy jest drogi, wyszukiwanie od końca i przesuwanie się po drodze (mądrzejsze sortowanie bąbelkowe do wstawienia) mogłoby być lepsze, choć nie asymptotycznie.2 n + 1logn + 2 n + 1
Lepsze rozwiązanie może wymagać użycia innej struktury danych. Tablice dają dostęp O (1) (dostęp losowy), ale wstawianie i usuwanie może kosztować. Tabela skrótów może zawierać wstawianie i usuwanie O (1), dostęp będzie kosztował. Inne opcje obejmują BST i sterty itp. Warto rozważyć potrzeby użycia aplikacji w zakresie wstawiania, usuwania i dostępu oraz wybierania bardziej specjalistycznej struktury.
Zauważ też, że jeśli chcesz dodać elementów do posortowanej tablicy n elementów, dobrym pomysłem może być wydajne sortowanie m elementów, a następnie scalenie dwóch tablic; sortowane tablice można również efektywnie budować przy użyciu np. hałd (sortowania stosów).mnm