Ordenação em Tempo Linear Algoritmos e Estuturas de Dados Verão 2012 Cátia Vaz 1 Algoritmos de Ordenação n insertion sort, selection sort, merge sort, quicksort e heapsort são algoritmos de ordenação baseados em comparações. n n Ω (n lg n) é um limite inferior para algoritmos de ordenação baseados em comparações. counting sort e radix sort são algoritmos de ordenação em “tempo linear” que utilizam outras operações para determinar a ordem de ordenação. Cátia Vaz 2 Counting Sort n n n n Assume que cada um dos n elementos do array A é um inteiro entre 0...k Se k = O(n), a ordenação é em tempo linear Algoritmo: n Determina para cada elemento x o número de elementos menores ou iguais; n Utiliza a informação anterior para colocar directamente cada elemento x no array final; Requer dois arrays: n Um array C com dimensão k, para contar o número de elementos menores ou iguais; n Um array B com dimensão n, para colocar os elementos ordenados. Cátia Vaz 3 Counting Sort C com dimensão k, em que C[k] é atribuído o número de elementos iguais k. Actualiza C[k] com o número de elementos menores ou iguais k. Como os elementos podem ser iguais, decrementa-se C[A[j]] cada vez que se coloca um A[j] no array B. Cátia Vaz 4 Counting Sort 1 2 3 4 2 5 3 0 0 1 C 2 0 2 3 0 1 C 2 2 4 7 7 8 1 2 3 4 A 1 2 3 4 . . . B 8 3 . . . 1 0 2 0 3 2 4 2 3 3 3 2 . . . 0 . . . . . . 3 8 0 3 5 . . . 8 3 8 5 Cátia Vaz 5 Radix Sort n Ideia do Algoritmo: n n Ordenar primeiro o dígito menos significativo; Para ordenar d dígitos: Cátia Vaz 6 Radix-sort - análise n Assumindo que se usa counting-sort 7