SlideShare uma empresa Scribd logo
1 de 139
Baixar para ler offline
Aula 18 – Algoritmos de Ordena¸c˜ao:
CountingSort e RadixSort
Norton Trevisan Roman
norton@usp.br
25 de outubro de 2018
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 1 / 18
Ordena¸c˜ao
Vimos at´e agora algoritmos baseados apenas em
compara¸c˜oes entre os elementos da entrada
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 2 / 18
Ordena¸c˜ao
Vimos at´e agora algoritmos baseados apenas em
compara¸c˜oes entre os elementos da entrada
Os chamados algoritmos de ordena¸c˜ao por compara¸c˜ao
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 2 / 18
Ordena¸c˜ao
Vimos at´e agora algoritmos baseados apenas em
compara¸c˜oes entre os elementos da entrada
Os chamados algoritmos de ordena¸c˜ao por compara¸c˜ao
Vimos tamb´em que esse tipo de algoritmo tem
limite Ω(n log n)
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 2 / 18
Ordena¸c˜ao
Vimos at´e agora algoritmos baseados apenas em
compara¸c˜oes entre os elementos da entrada
Os chamados algoritmos de ordena¸c˜ao por compara¸c˜ao
Vimos tamb´em que esse tipo de algoritmo tem
limite Ω(n log n)
Seriam esses os ´unicos tipos poss´ıveis?
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 2 / 18
Ordena¸c˜ao
Vimos at´e agora algoritmos baseados apenas em
compara¸c˜oes entre os elementos da entrada
Os chamados algoritmos de ordena¸c˜ao por compara¸c˜ao
Vimos tamb´em que esse tipo de algoritmo tem
limite Ω(n log n)
Seriam esses os ´unicos tipos poss´ıveis?
Veremos que n˜ao
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 2 / 18
Ordena¸c˜ao
Vimos at´e agora algoritmos baseados apenas em
compara¸c˜oes entre os elementos da entrada
Os chamados algoritmos de ordena¸c˜ao por compara¸c˜ao
Vimos tamb´em que esse tipo de algoritmo tem
limite Ω(n log n)
Seriam esses os ´unicos tipos poss´ıveis?
Veremos que n˜ao
Se conseguirmos ter alguma informa¸c˜ao que nos
ajude, podemos fazer algoritmos melhores
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 2 / 18
Counting Sort
Pressuposto:
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 3 / 18
Counting Sort
Pressuposto:
O Counting Sort assume que cada um dos n elementos da
entrada ´e um inteiro no intervalo de 0 a k, para algum
inteiro k
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 3 / 18
Counting Sort
Pressuposto:
O Counting Sort assume que cada um dos n elementos da
entrada ´e um inteiro no intervalo de 0 a k, para algum
inteiro k
Ideia:
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 3 / 18
Counting Sort
Pressuposto:
O Counting Sort assume que cada um dos n elementos da
entrada ´e um inteiro no intervalo de 0 a k, para algum
inteiro k
Ideia:
Determinar, para cada elemento de entrada x, o n´umero de
elementos menores que x
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 3 / 18
Counting Sort
Pressuposto:
O Counting Sort assume que cada um dos n elementos da
entrada ´e um inteiro no intervalo de 0 a k, para algum
inteiro k
Ideia:
Determinar, para cada elemento de entrada x, o n´umero de
elementos menores que x
Usar essa informa¸c˜ao para colocar x diretamente em sua
posi¸c˜ao no arranjo de sa´ıda
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 3 / 18
Counting Sort
Pressuposto:
O Counting Sort assume que cada um dos n elementos da
entrada ´e um inteiro no intervalo de 0 a k, para algum
inteiro k
Ideia:
Determinar, para cada elemento de entrada x, o n´umero de
elementos menores que x
Usar essa informa¸c˜ao para colocar x diretamente em sua
posi¸c˜ao no arranjo de sa´ıda
Precisamos, no entanto, tomar cuidado para n˜ao incluirmos
elementos de mesmo valor na mesma posi¸c˜ao
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 3 / 18
Counting Sort
Implementa¸c˜ao
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 4 / 18
Counting Sort
Implementa¸c˜ao
Assumimos que a entrada ´e um arranjo A[1..n] (ou
seja, conhecemos o tamanho de A de antem˜ao)
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 4 / 18
Counting Sort
Implementa¸c˜ao
Assumimos que a entrada ´e um arranjo A[1..n] (ou
seja, conhecemos o tamanho de A de antem˜ao)
Precisaremos de 2 outros arranjos:
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 4 / 18
Counting Sort
Implementa¸c˜ao
Assumimos que a entrada ´e um arranjo A[1..n] (ou
seja, conhecemos o tamanho de A de antem˜ao)
Precisaremos de 2 outros arranjos:
B[1..n]: guardar´a a sa´ıda ordenada
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 4 / 18
Counting Sort
Implementa¸c˜ao
Assumimos que a entrada ´e um arranjo A[1..n] (ou
seja, conhecemos o tamanho de A de antem˜ao)
Precisaremos de 2 outros arranjos:
B[1..n]: guardar´a a sa´ıda ordenada
C[0..k]: para armazenar o n´umero de ocorrˆencias de cada
elemento i de A (0 ≤ i ≤ k)
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 4 / 18
Counting Sort
Implementa¸c˜ao
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 5 / 18
Counting Sort
Implementa¸c˜ao
Arranjo de entrada
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 5 / 18
Counting Sort
Implementa¸c˜ao
Valor do maior elemento em
A (ou algum outro limitante)
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 5 / 18
Counting Sort
Implementa¸c˜ao
Fazemos C[i] conter
o n´umero de elementos
em A que s˜ao iguais a i
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 5 / 18
Counting Sort
Implementa¸c˜ao
Repare que os valores
em A v˜ao de 0 a k, as-
sim como os ´ındices de
C (e que os ´ındices est˜ao
naturalmente ordenados)
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 5 / 18
Counting Sort
Implementa¸c˜ao
Agora fazemos C[i] con-
ter o n´umero de elemen-
tos em A que s˜ao ≤ i
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 5 / 18
Counting Sort
Implementa¸c˜ao
Colocamos cada elemento de
A na posi¸c˜ao correta em B
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 5 / 18
Counting Sort
Implementa¸c˜ao
Cuidamos de n˜ao incluir
novamente os repetidos
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 5 / 18
Counting Sort
Implementa¸c˜ao
O −1 ´e para mapear a
contagem ao ´ındice em B
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 5 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
0 1 2 3 4 5 6 7
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
0 1 2 3 4 5 6 7
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
C
0 1 2 3 4 5
0 1 2 3 4 5 6 7
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
C
0 1 2 3 4 5
B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
0 0 0 0 0 0C
0 1 2 3 4 5
B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
0 0 0 0 0 0C
0 1 2 3 4 5
B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
0 0 1 0 0 0C
0 1 2 3 4 5
B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
0 0 1 0 0 0C
0 1 2 3 4 5
B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
0 0 1 0 0 1C
0 1 2 3 4 5
B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
0 0 1 0 0 1C
0 1 2 3 4 5
B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
0 0 1 1 0 1C
0 1 2 3 4 5
B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
0 0 1 1 0 1C
0 1 2 3 4 5
B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
1 0 1 1 0 1C
0 1 2 3 4 5
B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
1 0 1 1 0 1C
0 1 2 3 4 5
B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
1 0 2 1 0 1C
0 1 2 3 4 5
B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
1 0 2 1 0 1C
0 1 2 3 4 5
B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
1 0 2 2 0 1C
0 1 2 3 4 5
B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
1 0 2 2 0 1C
0 1 2 3 4 5
B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
2 0 2 2 0 1C
0 1 2 3 4 5
B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
2 0 2 2 0 1C
0 1 2 3 4 5
B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
2 0 2 3 0 1C
0 1 2 3 4 5
B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
2 0 2 3 0 1C
0 1 2 3 4 5
B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
i
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
2 2 2 3 0 1C
0 1 2 3 4 5
B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
i
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
2 2 2 3 0 1C
0 1 2 3 4 5
B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
i
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
2 2 4 3 0 1C
0 1 2 3 4 5
B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
i
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
2 2 4 3 0 1C
0 1 2 3 4 5
B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
i
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
2 2 4 7 0 1C
0 1 2 3 4 5
B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
i
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
2 2 4 7 0 1C
0 1 2 3 4 5
B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
i
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
2 2 4 7 7 1C
0 1 2 3 4 5
B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
i
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
2 2 4 7 7 1C
0 1 2 3 4 5
B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
i
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
2 2 4 7 7 8C
0 1 2 3 4 5
B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
i
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
2 2 4 7 7 8C
0 1 2 3 4 5
B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
2 2 4 7 7 8C
0 1 2 3 4 5
3B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
2 2 4 6 7 8C
0 1 2 3 4 5
3B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
2 2 4 6 7 8C
0 1 2 3 4 5
3B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
2 2 4 6 7 8C
0 1 2 3 4 5
0 3B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
1 2 4 6 7 8C
0 1 2 3 4 5
0 3B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
1 2 4 6 7 8C
0 1 2 3 4 5
0 3B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
1 2 4 6 7 8C
0 1 2 3 4 5
0 3 3B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
1 2 4 5 7 8C
0 1 2 3 4 5
0 3 3B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
1 2 4 5 7 8C
0 1 2 3 4 5
0 3 3B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
1 2 4 5 7 8C
0 1 2 3 4 5
0 2 3 3B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
1 2 3 5 7 8C
0 1 2 3 4 5
0 2 3 3B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
1 2 3 5 7 8C
0 1 2 3 4 5
0 2 3 3B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
1 2 3 5 7 8C
0 1 2 3 4 5
0 0 2 3 3B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
0 2 3 5 7 8C
0 1 2 3 4 5
0 0 2 3 3B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
0 2 3 5 7 8C
0 1 2 3 4 5
0 0 2 3 3B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
0 2 3 5 7 8C
0 1 2 3 4 5
0 0 2 3 3 3B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
0 2 3 4 7 8C
0 1 2 3 4 5
0 0 2 3 3 3B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
0 2 3 4 7 8C
0 1 2 3 4 5
0 0 2 3 3 3B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
0 2 3 4 7 8C
0 1 2 3 4 5
0 0 2 3 3 3 5B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
0 2 3 4 7 7C
0 1 2 3 4 5
0 0 2 3 3 3 5B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
0 2 3 4 7 7C
0 1 2 3 4 5
0 0 2 3 3 3 5B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
0 2 3 4 7 7C
0 1 2 3 4 5
0 0 2 2 3 3 3 5B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
0 2 2 4 7 7C
0 1 2 3 4 5
0 0 2 2 3 3 3 5B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
j
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
0 2 2 4 7 7C
0 1 2 3 4 5
0 0 2 2 3 3 3 5B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Implementa¸c˜ao
2 5 3 0 2 3 0 3A
k=5
0 2 2 4 7 7C
0 1 2 3 4 5
0 0 2 2 3 3 3 5B
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
Counting Sort
Complexidade
E qual a
complexidade
disso?
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 7 / 18
Counting Sort
Complexidade
E qual a
complexidade
disso?
O(k)
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 7 / 18
Counting Sort
Complexidade
E qual a
complexidade
disso?
O(k)
+O(n)
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 7 / 18
Counting Sort
Complexidade
E qual a
complexidade
disso?
O(k)
+O(n)
+O(k)
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 7 / 18
Counting Sort
Complexidade
E qual a
complexidade
disso?
O(k)
+O(n)
+O(k)
+O(n)
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 7 / 18
Counting Sort
Complexidade
E qual a
complexidade
disso?
O(k)
+O(n)
+O(k)
+O(n)
O(n + k)
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 7 / 18
Counting Sort
Complexidade
O(n + k) int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 8 / 18
Counting Sort
Complexidade
O(n + k)
Se k = O(n), ent˜ao
Counting Sort roda em
O(n)
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 8 / 18
Counting Sort
Complexidade
O(n + k)
Se k = O(n), ent˜ao
Counting Sort roda em
O(n)
k = O(n) significa que k
´e constante ou, no
m´aximo, linearmente
proporcional a n
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 8 / 18
Counting Sort
Complexidade
O(n + k)
Se k = O(n), ent˜ao
Counting Sort roda em
O(n)
k = O(n) significa que k
´e constante ou, no
m´aximo, linearmente
proporcional a n
Essa ´e a limita¸c˜ao do
algoritmo
int[] countingSort(int[] A, int k) {
int[] C = new int[k+1];
int[] B = new int[A.length];
for (int i=0; i<=k; i++)
C[i] = 0;
for (int j=0; j<A.length; j++)
C[A[j]]++;
for (int i=1; i<=k; i++)
C[i] = C[i] + C[i-1];
for (int j = A.length-1; j>=0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]]--;
}
return(B);
}
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 8 / 18
Counting Sort
Complexidade
Mas o limite inferior para ordena¸c˜ao n˜ao era
Ω(n log n)?
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 9 / 18
Counting Sort
Complexidade
Mas o limite inferior para ordena¸c˜ao n˜ao era
Ω(n log n)?
Sim, mas para algoritmos baseados em compara¸c˜oes entre
elementos do arranjo
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 9 / 18
Counting Sort
Complexidade
Mas o limite inferior para ordena¸c˜ao n˜ao era
Ω(n log n)?
Sim, mas para algoritmos baseados em compara¸c˜oes entre
elementos do arranjo
Nenhuma compara¸c˜ao entre elementos do arranjo
ocorre no Counting Sort
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 9 / 18
Counting Sort
Complexidade
Mas o limite inferior para ordena¸c˜ao n˜ao era
Ω(n log n)?
Sim, mas para algoritmos baseados em compara¸c˜oes entre
elementos do arranjo
Nenhuma compara¸c˜ao entre elementos do arranjo
ocorre no Counting Sort
Em vez disso, ele usa esses valores para indexar o arranjo C
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 9 / 18
Counting Sort
Complexidade
Mas o limite inferior para ordena¸c˜ao n˜ao era
Ω(n log n)?
Sim, mas para algoritmos baseados em compara¸c˜oes entre
elementos do arranjo
Nenhuma compara¸c˜ao entre elementos do arranjo
ocorre no Counting Sort
Em vez disso, ele usa esses valores para indexar o arranjo C
Por isso o limite Ω(n log n) n˜ao se aplica
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 9 / 18
Counting Sort
Ordena¸c˜ao Est´avel
Uma importante propriedade do Counting Sort ´e
que ele ´e est´avel
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 10 / 18
Counting Sort
Ordena¸c˜ao Est´avel
Uma importante propriedade do Counting Sort ´e
que ele ´e est´avel
Ou seja, valores iguais aparecem no arranjo de sa´ıda na
mesma ordem em que estavam no de entrada
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 10 / 18
Counting Sort
Ordena¸c˜ao Est´avel
Uma importante propriedade do Counting Sort ´e
que ele ´e est´avel
Ou seja, valores iguais aparecem no arranjo de sa´ıda na
mesma ordem em que estavam no de entrada
Isso ´e importante quando cada dado carrega consigo
outros dados sat´elites
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 10 / 18
Counting Sort
Ordena¸c˜ao Est´avel
Uma importante propriedade do Counting Sort ´e
que ele ´e est´avel
Ou seja, valores iguais aparecem no arranjo de sa´ıda na
mesma ordem em que estavam no de entrada
Isso ´e importante quando cada dado carrega consigo
outros dados sat´elites
Que dependem da ordem do dado em rela¸c˜ao aos que tˆem o
mesmo valor no arranjo
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 10 / 18
Counting Sort
Ordena¸c˜ao Est´avel
Uma importante propriedade do Counting Sort ´e
que ele ´e est´avel
Ou seja, valores iguais aparecem no arranjo de sa´ıda na
mesma ordem em que estavam no de entrada
Isso ´e importante quando cada dado carrega consigo
outros dados sat´elites
Que dependem da ordem do dado em rela¸c˜ao aos que tˆem o
mesmo valor no arranjo
Mais adiante veremos um exemplo de onde isso ´e
importante...
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 10 / 18
Radix Sort
Radix Sort
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 11 / 18
Radix Sort
Pressuposto:
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 12 / 18
Radix Sort
Pressuposto:
O Radix Sort assume que cada um dos n elementos da
entrada ´e um inteiro de, no m´aximo, d d´ıgitos (d constante)
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 12 / 18
Radix Sort
Pressuposto:
O Radix Sort assume que cada um dos n elementos da
entrada ´e um inteiro de, no m´aximo, d d´ıgitos (d constante)
Onde o d´ıgito 1 ´e o menos significativo (direita) e o d´ıgito d
o mais significativo (esquerda)
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 12 / 18
Radix Sort
Pressuposto:
O Radix Sort assume que cada um dos n elementos da
entrada ´e um inteiro de, no m´aximo, d d´ıgitos (d constante)
Onde o d´ıgito 1 ´e o menos significativo (direita) e o d´ıgito d
o mais significativo (esquerda)
Ex: CEP – inteiro de 8 d´ıgitos
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 12 / 18
Radix Sort
Pressuposto:
O Radix Sort assume que cada um dos n elementos da
entrada ´e um inteiro de, no m´aximo, d d´ıgitos (d constante)
Onde o d´ıgito 1 ´e o menos significativo (direita) e o d´ıgito d
o mais significativo (esquerda)
Ex: CEP – inteiro de 8 d´ıgitos
Note que cada elemento da entrada ter um
comprimento m´aximo constante o torna
independente de n
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 12 / 18
Radix Sort
Pressuposto:
O Radix Sort assume que cada um dos n elementos da
entrada ´e um inteiro de, no m´aximo, d d´ıgitos (d constante)
Onde o d´ıgito 1 ´e o menos significativo (direita) e o d´ıgito d
o mais significativo (esquerda)
Ex: CEP – inteiro de 8 d´ıgitos
Note que cada elemento da entrada ter um
comprimento m´aximo constante o torna
independente de n
Independente do tamanho da pr´opria entrada
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 12 / 18
Radix Sort
Funcionamento
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 13 / 18
Radix Sort
Funcionamento
1 Ordene os valores primeiro pelo d´ıgito menos significativo
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 13 / 18
Radix Sort
Funcionamento
1 Ordene os valores primeiro pelo d´ıgito menos significativo
2 Repita a opera¸c˜ao para o segundo d´ıgito menos significativo
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 13 / 18
Radix Sort
Funcionamento
1 Ordene os valores primeiro pelo d´ıgito menos significativo
2 Repita a opera¸c˜ao para o segundo d´ıgito menos significativo
3 Continue at´e ter passado por todos os d´ıgitos
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 13 / 18
Radix Sort
Funcionamento
1 Ordene os valores primeiro pelo d´ıgito menos significativo
2 Repita a opera¸c˜ao para o segundo d´ıgito menos significativo
3 Continue at´e ter passado por todos os d´ıgitos
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 13 / 18
Radix Sort
Funcionamento
1 Ordene os valores primeiro pelo d´ıgito menos significativo
2 Repita a opera¸c˜ao para o segundo d´ıgito menos significativo
3 Continue at´e ter passado por todos os d´ıgitos
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 13 / 18
Radix Sort
Funcionamento
1 Ordene os valores primeiro pelo d´ıgito menos significativo
2 Repita a opera¸c˜ao para o segundo d´ıgito menos significativo
3 Continue at´e ter passado por todos os d´ıgitos
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 13 / 18
Radix Sort
Funcionamento
1 Ordene os valores primeiro pelo d´ıgito menos significativo
2 Repita a opera¸c˜ao para o segundo d´ıgito menos significativo
3 Continue at´e ter passado por todos os d´ıgitos
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 13 / 18
Radix Sort
Funcionamento
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 14 / 18
Radix Sort
Funcionamento
Para que isso funcione, ´e essencial que a ordena¸c˜ao
dos d´ıgitos seja est´avel
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 14 / 18
Radix Sort
Funcionamento
Para que isso funcione, ´e essencial que a ordena¸c˜ao
dos d´ıgitos seja est´avel
De modo a manter a ordem dos d´ıgitos menos significativos
j´a ordenados
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 14 / 18
Radix Sort
Funcionamento
Para que isso funcione, ´e essencial que a ordena¸c˜ao
dos d´ıgitos seja est´avel
De modo a manter a ordem dos d´ıgitos menos significativos
j´a ordenados
Ex: Counting Sort e QuickSort (se implementado para tal)
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 14 / 18
Radix Sort
Algoritmo
radixSort(A, d):
para i = 1 at´e d:
use um m´etodo est´avel para ordenar o
arranjo A no digito i
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 15 / 18
Radix Sort
Algoritmo
radixSort(A, d):
para i = 1 at´e d:
use um m´etodo est´avel para ordenar o
arranjo A no digito i
E qual a complexidade disso?
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 15 / 18
Radix Sort
Algoritmo
radixSort(A, d):
para i = 1 at´e d:
use um m´etodo est´avel para ordenar o
arranjo A no digito i
E qual a complexidade disso?
O(1)
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 15 / 18
Radix Sort
Algoritmo
radixSort(A, d):
para i = 1 at´e d:
use um m´etodo est´avel para ordenar o
arranjo A no digito i
E qual a complexidade disso?
O(1)×O(f (n)), onde O(f (n)) ´e a complexidade do
algoritmo de ordena¸c˜ao usado
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 15 / 18
Radix Sort
Algoritmo
radixSort(A, d):
para i = 1 at´e d:
use um m´etodo est´avel para ordenar o
arranjo A no digito i
E qual a complexidade disso?
O(1)×O(f (n)), onde O(f (n)) ´e a complexidade do
algoritmo de ordena¸c˜ao usado
Se este for o Counting Sort, em sua vers˜ao linear, ent˜ao
O(f (n)) = O(n), e o Radix Sort ser´a O(n)
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 15 / 18
Radix Sort
Observa¸c˜oes
Antigamente usado nas m´aquinas mecˆanicas de
ordenar cartas
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 16 / 18
Radix Sort
Observa¸c˜oes
Antigamente usado nas m´aquinas mecˆanicas de
ordenar cartas
Hoje, por vezes usado para ordenar registros de
informa¸c˜ao que possuem m´ultiplas chaves
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 16 / 18
Radix Sort
Observa¸c˜oes
Antigamente usado nas m´aquinas mecˆanicas de
ordenar cartas
Hoje, por vezes usado para ordenar registros de
informa¸c˜ao que possuem m´ultiplas chaves
Ex: datas
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 16 / 18
Radix Sort
Observa¸c˜oes
Antigamente usado nas m´aquinas mecˆanicas de
ordenar cartas
Hoje, por vezes usado para ordenar registros de
informa¸c˜ao que possuem m´ultiplas chaves
Ex: datas
Podemos usar um algoritmo de ordena¸c˜ao cuja fun¸c˜ao de
compara¸c˜ao retorne a maior de duas dadas, comparando ano e, em
caso de empate, mˆes e, em caso de empate, dia
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 16 / 18
Radix Sort
Observa¸c˜oes
Antigamente usado nas m´aquinas mecˆanicas de
ordenar cartas
Hoje, por vezes usado para ordenar registros de
informa¸c˜ao que possuem m´ultiplas chaves
Ex: datas
Podemos usar um algoritmo de ordena¸c˜ao cuja fun¸c˜ao de
compara¸c˜ao retorne a maior de duas dadas, comparando ano e, em
caso de empate, mˆes e, em caso de empate, dia
Ou ordenar a informa¸c˜ao 3 vezes com um m´etodo est´avel de
ordena¸c˜ao: primeiro no dia, em seguida no mˆes, e ent˜ao no ano
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 16 / 18
Radix Sort
Observa¸c˜oes
Altamente dependente do m´etodo usado para
ordenar os d´ıgitos
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 17 / 18
Radix Sort
Observa¸c˜oes
Altamente dependente do m´etodo usado para
ordenar os d´ıgitos
Com impacto direto em sua complexidade
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 17 / 18
Radix Sort
Observa¸c˜oes
Altamente dependente do m´etodo usado para
ordenar os d´ıgitos
Com impacto direto em sua complexidade
Se usado com Counting sort:
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 17 / 18
Radix Sort
Observa¸c˜oes
Altamente dependente do m´etodo usado para
ordenar os d´ıgitos
Com impacto direto em sua complexidade
Se usado com Counting sort:
Tem complexidade linear
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 17 / 18
Radix Sort
Observa¸c˜oes
Altamente dependente do m´etodo usado para
ordenar os d´ıgitos
Com impacto direto em sua complexidade
Se usado com Counting sort:
Tem complexidade linear
N˜ao ´e in-place, criando diversos arranjos auxiliares na
mem´oria
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 17 / 18
Referˆencias
Cormen, Thomas H., Leiserson, Charles E., Rivest, Ronald L.,
Stein, Clifford. Introduction to Algorithms. 2a ed. MIT Press,
2001.
https://www.geeksforgeeks.org/radix-sort/
Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 18 / 18

Mais conteúdo relacionado

Semelhante a (ACH2002) Introdução à Análise de Algoritmos - Aula 18

(ACH2002) Introdução à Análise de Algoritmos - Aula 19
(ACH2002) Introdução à Análise de Algoritmos - Aula 19(ACH2002) Introdução à Análise de Algoritmos - Aula 19
(ACH2002) Introdução à Análise de Algoritmos - Aula 19Norton Trevisan Roman
 
(ACH2002) Introdução à Análise de Algoritmos - Aula 09
(ACH2002) Introdução à Análise de Algoritmos - Aula 09(ACH2002) Introdução à Análise de Algoritmos - Aula 09
(ACH2002) Introdução à Análise de Algoritmos - Aula 09Norton Trevisan Roman
 
Apresentacao countingsort
Apresentacao countingsortApresentacao countingsort
Apresentacao countingsortmicael
 
Análise de Algoritmos - Problemas, instâncias, algoritmos e tempo
Análise de Algoritmos - Problemas, instâncias, algoritmos e tempoAnálise de Algoritmos - Problemas, instâncias, algoritmos e tempo
Análise de Algoritmos - Problemas, instâncias, algoritmos e tempoDelacyr Ferreira
 
(ACH2002) Introdução à Análise de Algoritmos - Aula 10
(ACH2002) Introdução à Análise de Algoritmos - Aula 10(ACH2002) Introdução à Análise de Algoritmos - Aula 10
(ACH2002) Introdução à Análise de Algoritmos - Aula 10Norton Trevisan Roman
 
(ACH2002) Introdução à Análise de Algoritmos - Aula 02
(ACH2002) Introdução à Análise de Algoritmos - Aula 02(ACH2002) Introdução à Análise de Algoritmos - Aula 02
(ACH2002) Introdução à Análise de Algoritmos - Aula 02Norton Trevisan Roman
 
(ACH2002) Introdução à Análise de Algoritmos - Aula 07
(ACH2002) Introdução à Análise de Algoritmos - Aula 07(ACH2002) Introdução à Análise de Algoritmos - Aula 07
(ACH2002) Introdução à Análise de Algoritmos - Aula 07Norton Trevisan Roman
 

Semelhante a (ACH2002) Introdução à Análise de Algoritmos - Aula 18 (9)

(ACH2002) Introdução à Análise de Algoritmos - Aula 19
(ACH2002) Introdução à Análise de Algoritmos - Aula 19(ACH2002) Introdução à Análise de Algoritmos - Aula 19
(ACH2002) Introdução à Análise de Algoritmos - Aula 19
 
(ACH2002) Introdução à Análise de Algoritmos - Aula 09
(ACH2002) Introdução à Análise de Algoritmos - Aula 09(ACH2002) Introdução à Análise de Algoritmos - Aula 09
(ACH2002) Introdução à Análise de Algoritmos - Aula 09
 
Apresentacao countingsort
Apresentacao countingsortApresentacao countingsort
Apresentacao countingsort
 
Análise de Algoritmos - Problemas, instâncias, algoritmos e tempo
Análise de Algoritmos - Problemas, instâncias, algoritmos e tempoAnálise de Algoritmos - Problemas, instâncias, algoritmos e tempo
Análise de Algoritmos - Problemas, instâncias, algoritmos e tempo
 
(ACH2002) Introdução à Análise de Algoritmos - Aula 10
(ACH2002) Introdução à Análise de Algoritmos - Aula 10(ACH2002) Introdução à Análise de Algoritmos - Aula 10
(ACH2002) Introdução à Análise de Algoritmos - Aula 10
 
(ACH2002) Introdução à Análise de Algoritmos - Aula 02
(ACH2002) Introdução à Análise de Algoritmos - Aula 02(ACH2002) Introdução à Análise de Algoritmos - Aula 02
(ACH2002) Introdução à Análise de Algoritmos - Aula 02
 
(ACH2002) Introdução à Análise de Algoritmos - Aula 07
(ACH2002) Introdução à Análise de Algoritmos - Aula 07(ACH2002) Introdução à Análise de Algoritmos - Aula 07
(ACH2002) Introdução à Análise de Algoritmos - Aula 07
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Aula 3-lógica.pptx
Aula 3-lógica.pptxAula 3-lógica.pptx
Aula 3-lógica.pptx
 

Mais de Norton Trevisan Roman

(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05Norton Trevisan Roman
 

Mais de Norton Trevisan Roman (20)

(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24
 
(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23
 
(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22
 
(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21
 
(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20
 
(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19
 
(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18
 
(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17
 
(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16
 
(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15
 
(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14
 
(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13
 
(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12
 
(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11
 
(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10
 
(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09
 
(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08
 
(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07
 
(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06
 
(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05
 

Último

PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...HELENO FAVACHO
 
Camadas da terra -Litosfera conteúdo 6º ano
Camadas da terra -Litosfera  conteúdo 6º anoCamadas da terra -Litosfera  conteúdo 6º ano
Camadas da terra -Litosfera conteúdo 6º anoRachel Facundo
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecniCleidianeCarvalhoPer
 
Araribá slides 9ano.pdf para os alunos do medio
Araribá slides 9ano.pdf para os alunos do medioAraribá slides 9ano.pdf para os alunos do medio
Araribá slides 9ano.pdf para os alunos do medioDomingasMariaRomao
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...PatriciaCaetano18
 
8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeitotatianehilda
 
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...andreiavys
 
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIAPROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIAHELENO FAVACHO
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfHELENO FAVACHO
 
Cartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxCartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxMarcosLemes28
 
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfApresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfcomercial400681
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaHELENO FAVACHO
 
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfHELENO FAVACHO
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxLuizHenriquedeAlmeid6
 
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTeoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTailsonSantos1
 
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2Maria Teresa Thomaz
 
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptxMonoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptxFlviaGomes64
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*Viviane Moreiras
 
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVAEDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVAssuser2ad38b
 

Último (20)

PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
 
Camadas da terra -Litosfera conteúdo 6º ano
Camadas da terra -Litosfera  conteúdo 6º anoCamadas da terra -Litosfera  conteúdo 6º ano
Camadas da terra -Litosfera conteúdo 6º ano
 
Aula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIXAula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIX
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
 
Araribá slides 9ano.pdf para os alunos do medio
Araribá slides 9ano.pdf para os alunos do medioAraribá slides 9ano.pdf para os alunos do medio
Araribá slides 9ano.pdf para os alunos do medio
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
 
8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito
 
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
 
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIAPROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
 
Cartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxCartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptx
 
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfApresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
 
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
 
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTeoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
 
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
 
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptxMonoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*
 
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVAEDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
 

(ACH2002) Introdução à Análise de Algoritmos - Aula 18

  • 1. Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort Norton Trevisan Roman norton@usp.br 25 de outubro de 2018 Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 1 / 18
  • 2. Ordena¸c˜ao Vimos at´e agora algoritmos baseados apenas em compara¸c˜oes entre os elementos da entrada Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 2 / 18
  • 3. Ordena¸c˜ao Vimos at´e agora algoritmos baseados apenas em compara¸c˜oes entre os elementos da entrada Os chamados algoritmos de ordena¸c˜ao por compara¸c˜ao Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 2 / 18
  • 4. Ordena¸c˜ao Vimos at´e agora algoritmos baseados apenas em compara¸c˜oes entre os elementos da entrada Os chamados algoritmos de ordena¸c˜ao por compara¸c˜ao Vimos tamb´em que esse tipo de algoritmo tem limite Ω(n log n) Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 2 / 18
  • 5. Ordena¸c˜ao Vimos at´e agora algoritmos baseados apenas em compara¸c˜oes entre os elementos da entrada Os chamados algoritmos de ordena¸c˜ao por compara¸c˜ao Vimos tamb´em que esse tipo de algoritmo tem limite Ω(n log n) Seriam esses os ´unicos tipos poss´ıveis? Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 2 / 18
  • 6. Ordena¸c˜ao Vimos at´e agora algoritmos baseados apenas em compara¸c˜oes entre os elementos da entrada Os chamados algoritmos de ordena¸c˜ao por compara¸c˜ao Vimos tamb´em que esse tipo de algoritmo tem limite Ω(n log n) Seriam esses os ´unicos tipos poss´ıveis? Veremos que n˜ao Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 2 / 18
  • 7. Ordena¸c˜ao Vimos at´e agora algoritmos baseados apenas em compara¸c˜oes entre os elementos da entrada Os chamados algoritmos de ordena¸c˜ao por compara¸c˜ao Vimos tamb´em que esse tipo de algoritmo tem limite Ω(n log n) Seriam esses os ´unicos tipos poss´ıveis? Veremos que n˜ao Se conseguirmos ter alguma informa¸c˜ao que nos ajude, podemos fazer algoritmos melhores Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 2 / 18
  • 8. Counting Sort Pressuposto: Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 3 / 18
  • 9. Counting Sort Pressuposto: O Counting Sort assume que cada um dos n elementos da entrada ´e um inteiro no intervalo de 0 a k, para algum inteiro k Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 3 / 18
  • 10. Counting Sort Pressuposto: O Counting Sort assume que cada um dos n elementos da entrada ´e um inteiro no intervalo de 0 a k, para algum inteiro k Ideia: Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 3 / 18
  • 11. Counting Sort Pressuposto: O Counting Sort assume que cada um dos n elementos da entrada ´e um inteiro no intervalo de 0 a k, para algum inteiro k Ideia: Determinar, para cada elemento de entrada x, o n´umero de elementos menores que x Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 3 / 18
  • 12. Counting Sort Pressuposto: O Counting Sort assume que cada um dos n elementos da entrada ´e um inteiro no intervalo de 0 a k, para algum inteiro k Ideia: Determinar, para cada elemento de entrada x, o n´umero de elementos menores que x Usar essa informa¸c˜ao para colocar x diretamente em sua posi¸c˜ao no arranjo de sa´ıda Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 3 / 18
  • 13. Counting Sort Pressuposto: O Counting Sort assume que cada um dos n elementos da entrada ´e um inteiro no intervalo de 0 a k, para algum inteiro k Ideia: Determinar, para cada elemento de entrada x, o n´umero de elementos menores que x Usar essa informa¸c˜ao para colocar x diretamente em sua posi¸c˜ao no arranjo de sa´ıda Precisamos, no entanto, tomar cuidado para n˜ao incluirmos elementos de mesmo valor na mesma posi¸c˜ao Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 3 / 18
  • 14. Counting Sort Implementa¸c˜ao Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 4 / 18
  • 15. Counting Sort Implementa¸c˜ao Assumimos que a entrada ´e um arranjo A[1..n] (ou seja, conhecemos o tamanho de A de antem˜ao) Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 4 / 18
  • 16. Counting Sort Implementa¸c˜ao Assumimos que a entrada ´e um arranjo A[1..n] (ou seja, conhecemos o tamanho de A de antem˜ao) Precisaremos de 2 outros arranjos: Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 4 / 18
  • 17. Counting Sort Implementa¸c˜ao Assumimos que a entrada ´e um arranjo A[1..n] (ou seja, conhecemos o tamanho de A de antem˜ao) Precisaremos de 2 outros arranjos: B[1..n]: guardar´a a sa´ıda ordenada Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 4 / 18
  • 18. Counting Sort Implementa¸c˜ao Assumimos que a entrada ´e um arranjo A[1..n] (ou seja, conhecemos o tamanho de A de antem˜ao) Precisaremos de 2 outros arranjos: B[1..n]: guardar´a a sa´ıda ordenada C[0..k]: para armazenar o n´umero de ocorrˆencias de cada elemento i de A (0 ≤ i ≤ k) Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 4 / 18
  • 19. Counting Sort Implementa¸c˜ao int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 5 / 18
  • 20. Counting Sort Implementa¸c˜ao Arranjo de entrada int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 5 / 18
  • 21. Counting Sort Implementa¸c˜ao Valor do maior elemento em A (ou algum outro limitante) int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 5 / 18
  • 22. Counting Sort Implementa¸c˜ao Fazemos C[i] conter o n´umero de elementos em A que s˜ao iguais a i int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 5 / 18
  • 23. Counting Sort Implementa¸c˜ao Repare que os valores em A v˜ao de 0 a k, as- sim como os ´ındices de C (e que os ´ındices est˜ao naturalmente ordenados) int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 5 / 18
  • 24. Counting Sort Implementa¸c˜ao Agora fazemos C[i] con- ter o n´umero de elemen- tos em A que s˜ao ≤ i int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 5 / 18
  • 25. Counting Sort Implementa¸c˜ao Colocamos cada elemento de A na posi¸c˜ao correta em B int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 5 / 18
  • 26. Counting Sort Implementa¸c˜ao Cuidamos de n˜ao incluir novamente os repetidos int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 5 / 18
  • 27. Counting Sort Implementa¸c˜ao O −1 ´e para mapear a contagem ao ´ındice em B int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 5 / 18
  • 28. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A 0 1 2 3 4 5 6 7 int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 29. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 0 1 2 3 4 5 6 7 int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 30. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 C 0 1 2 3 4 5 0 1 2 3 4 5 6 7 int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 31. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 C 0 1 2 3 4 5 B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 32. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 0 0 0 0 0 0C 0 1 2 3 4 5 B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 33. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 0 0 0 0 0 0C 0 1 2 3 4 5 B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 34. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 0 0 1 0 0 0C 0 1 2 3 4 5 B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 35. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 0 0 1 0 0 0C 0 1 2 3 4 5 B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 36. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 0 0 1 0 0 1C 0 1 2 3 4 5 B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 37. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 0 0 1 0 0 1C 0 1 2 3 4 5 B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 38. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 0 0 1 1 0 1C 0 1 2 3 4 5 B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 39. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 0 0 1 1 0 1C 0 1 2 3 4 5 B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 40. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 1 0 1 1 0 1C 0 1 2 3 4 5 B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 41. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 1 0 1 1 0 1C 0 1 2 3 4 5 B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 42. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 1 0 2 1 0 1C 0 1 2 3 4 5 B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 43. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 1 0 2 1 0 1C 0 1 2 3 4 5 B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 44. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 1 0 2 2 0 1C 0 1 2 3 4 5 B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 45. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 1 0 2 2 0 1C 0 1 2 3 4 5 B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 46. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 2 0 2 2 0 1C 0 1 2 3 4 5 B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 47. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 2 0 2 2 0 1C 0 1 2 3 4 5 B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 48. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 2 0 2 3 0 1C 0 1 2 3 4 5 B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 49. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 2 0 2 3 0 1C 0 1 2 3 4 5 B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 i int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 50. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 2 2 2 3 0 1C 0 1 2 3 4 5 B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 i int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 51. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 2 2 2 3 0 1C 0 1 2 3 4 5 B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 i int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 52. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 2 2 4 3 0 1C 0 1 2 3 4 5 B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 i int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 53. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 2 2 4 3 0 1C 0 1 2 3 4 5 B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 i int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 54. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 2 2 4 7 0 1C 0 1 2 3 4 5 B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 i int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 55. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 2 2 4 7 0 1C 0 1 2 3 4 5 B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 i int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 56. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 2 2 4 7 7 1C 0 1 2 3 4 5 B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 i int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 57. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 2 2 4 7 7 1C 0 1 2 3 4 5 B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 i int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 58. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 2 2 4 7 7 8C 0 1 2 3 4 5 B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 i int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 59. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 2 2 4 7 7 8C 0 1 2 3 4 5 B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 60. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 2 2 4 7 7 8C 0 1 2 3 4 5 3B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 61. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 2 2 4 6 7 8C 0 1 2 3 4 5 3B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 62. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 2 2 4 6 7 8C 0 1 2 3 4 5 3B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 63. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 2 2 4 6 7 8C 0 1 2 3 4 5 0 3B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 64. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 1 2 4 6 7 8C 0 1 2 3 4 5 0 3B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 65. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 1 2 4 6 7 8C 0 1 2 3 4 5 0 3B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 66. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 1 2 4 6 7 8C 0 1 2 3 4 5 0 3 3B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 67. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 1 2 4 5 7 8C 0 1 2 3 4 5 0 3 3B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 68. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 1 2 4 5 7 8C 0 1 2 3 4 5 0 3 3B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 69. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 1 2 4 5 7 8C 0 1 2 3 4 5 0 2 3 3B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 70. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 1 2 3 5 7 8C 0 1 2 3 4 5 0 2 3 3B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 71. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 1 2 3 5 7 8C 0 1 2 3 4 5 0 2 3 3B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 72. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 1 2 3 5 7 8C 0 1 2 3 4 5 0 0 2 3 3B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 73. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 0 2 3 5 7 8C 0 1 2 3 4 5 0 0 2 3 3B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 74. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 0 2 3 5 7 8C 0 1 2 3 4 5 0 0 2 3 3B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 75. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 0 2 3 5 7 8C 0 1 2 3 4 5 0 0 2 3 3 3B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 76. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 0 2 3 4 7 8C 0 1 2 3 4 5 0 0 2 3 3 3B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 77. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 0 2 3 4 7 8C 0 1 2 3 4 5 0 0 2 3 3 3B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 78. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 0 2 3 4 7 8C 0 1 2 3 4 5 0 0 2 3 3 3 5B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 79. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 0 2 3 4 7 7C 0 1 2 3 4 5 0 0 2 3 3 3 5B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 80. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 0 2 3 4 7 7C 0 1 2 3 4 5 0 0 2 3 3 3 5B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 81. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 0 2 3 4 7 7C 0 1 2 3 4 5 0 0 2 2 3 3 3 5B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 82. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 0 2 2 4 7 7C 0 1 2 3 4 5 0 0 2 2 3 3 3 5B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 j int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 83. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 0 2 2 4 7 7C 0 1 2 3 4 5 0 0 2 2 3 3 3 5B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 84. Counting Sort Implementa¸c˜ao 2 5 3 0 2 3 0 3A k=5 0 2 2 4 7 7C 0 1 2 3 4 5 0 0 2 2 3 3 3 5B 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 6 / 18
  • 85. Counting Sort Complexidade E qual a complexidade disso? int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 7 / 18
  • 86. Counting Sort Complexidade E qual a complexidade disso? O(k) int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 7 / 18
  • 87. Counting Sort Complexidade E qual a complexidade disso? O(k) +O(n) int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 7 / 18
  • 88. Counting Sort Complexidade E qual a complexidade disso? O(k) +O(n) +O(k) int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 7 / 18
  • 89. Counting Sort Complexidade E qual a complexidade disso? O(k) +O(n) +O(k) +O(n) int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 7 / 18
  • 90. Counting Sort Complexidade E qual a complexidade disso? O(k) +O(n) +O(k) +O(n) O(n + k) int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 7 / 18
  • 91. Counting Sort Complexidade O(n + k) int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 8 / 18
  • 92. Counting Sort Complexidade O(n + k) Se k = O(n), ent˜ao Counting Sort roda em O(n) int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 8 / 18
  • 93. Counting Sort Complexidade O(n + k) Se k = O(n), ent˜ao Counting Sort roda em O(n) k = O(n) significa que k ´e constante ou, no m´aximo, linearmente proporcional a n int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 8 / 18
  • 94. Counting Sort Complexidade O(n + k) Se k = O(n), ent˜ao Counting Sort roda em O(n) k = O(n) significa que k ´e constante ou, no m´aximo, linearmente proporcional a n Essa ´e a limita¸c˜ao do algoritmo int[] countingSort(int[] A, int k) { int[] C = new int[k+1]; int[] B = new int[A.length]; for (int i=0; i<=k; i++) C[i] = 0; for (int j=0; j<A.length; j++) C[A[j]]++; for (int i=1; i<=k; i++) C[i] = C[i] + C[i-1]; for (int j = A.length-1; j>=0; j--) { B[C[A[j]]-1] = A[j]; C[A[j]]--; } return(B); } Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 8 / 18
  • 95. Counting Sort Complexidade Mas o limite inferior para ordena¸c˜ao n˜ao era Ω(n log n)? Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 9 / 18
  • 96. Counting Sort Complexidade Mas o limite inferior para ordena¸c˜ao n˜ao era Ω(n log n)? Sim, mas para algoritmos baseados em compara¸c˜oes entre elementos do arranjo Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 9 / 18
  • 97. Counting Sort Complexidade Mas o limite inferior para ordena¸c˜ao n˜ao era Ω(n log n)? Sim, mas para algoritmos baseados em compara¸c˜oes entre elementos do arranjo Nenhuma compara¸c˜ao entre elementos do arranjo ocorre no Counting Sort Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 9 / 18
  • 98. Counting Sort Complexidade Mas o limite inferior para ordena¸c˜ao n˜ao era Ω(n log n)? Sim, mas para algoritmos baseados em compara¸c˜oes entre elementos do arranjo Nenhuma compara¸c˜ao entre elementos do arranjo ocorre no Counting Sort Em vez disso, ele usa esses valores para indexar o arranjo C Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 9 / 18
  • 99. Counting Sort Complexidade Mas o limite inferior para ordena¸c˜ao n˜ao era Ω(n log n)? Sim, mas para algoritmos baseados em compara¸c˜oes entre elementos do arranjo Nenhuma compara¸c˜ao entre elementos do arranjo ocorre no Counting Sort Em vez disso, ele usa esses valores para indexar o arranjo C Por isso o limite Ω(n log n) n˜ao se aplica Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 9 / 18
  • 100. Counting Sort Ordena¸c˜ao Est´avel Uma importante propriedade do Counting Sort ´e que ele ´e est´avel Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 10 / 18
  • 101. Counting Sort Ordena¸c˜ao Est´avel Uma importante propriedade do Counting Sort ´e que ele ´e est´avel Ou seja, valores iguais aparecem no arranjo de sa´ıda na mesma ordem em que estavam no de entrada Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 10 / 18
  • 102. Counting Sort Ordena¸c˜ao Est´avel Uma importante propriedade do Counting Sort ´e que ele ´e est´avel Ou seja, valores iguais aparecem no arranjo de sa´ıda na mesma ordem em que estavam no de entrada Isso ´e importante quando cada dado carrega consigo outros dados sat´elites Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 10 / 18
  • 103. Counting Sort Ordena¸c˜ao Est´avel Uma importante propriedade do Counting Sort ´e que ele ´e est´avel Ou seja, valores iguais aparecem no arranjo de sa´ıda na mesma ordem em que estavam no de entrada Isso ´e importante quando cada dado carrega consigo outros dados sat´elites Que dependem da ordem do dado em rela¸c˜ao aos que tˆem o mesmo valor no arranjo Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 10 / 18
  • 104. Counting Sort Ordena¸c˜ao Est´avel Uma importante propriedade do Counting Sort ´e que ele ´e est´avel Ou seja, valores iguais aparecem no arranjo de sa´ıda na mesma ordem em que estavam no de entrada Isso ´e importante quando cada dado carrega consigo outros dados sat´elites Que dependem da ordem do dado em rela¸c˜ao aos que tˆem o mesmo valor no arranjo Mais adiante veremos um exemplo de onde isso ´e importante... Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 10 / 18
  • 105. Radix Sort Radix Sort Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 11 / 18
  • 106. Radix Sort Pressuposto: Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 12 / 18
  • 107. Radix Sort Pressuposto: O Radix Sort assume que cada um dos n elementos da entrada ´e um inteiro de, no m´aximo, d d´ıgitos (d constante) Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 12 / 18
  • 108. Radix Sort Pressuposto: O Radix Sort assume que cada um dos n elementos da entrada ´e um inteiro de, no m´aximo, d d´ıgitos (d constante) Onde o d´ıgito 1 ´e o menos significativo (direita) e o d´ıgito d o mais significativo (esquerda) Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 12 / 18
  • 109. Radix Sort Pressuposto: O Radix Sort assume que cada um dos n elementos da entrada ´e um inteiro de, no m´aximo, d d´ıgitos (d constante) Onde o d´ıgito 1 ´e o menos significativo (direita) e o d´ıgito d o mais significativo (esquerda) Ex: CEP – inteiro de 8 d´ıgitos Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 12 / 18
  • 110. Radix Sort Pressuposto: O Radix Sort assume que cada um dos n elementos da entrada ´e um inteiro de, no m´aximo, d d´ıgitos (d constante) Onde o d´ıgito 1 ´e o menos significativo (direita) e o d´ıgito d o mais significativo (esquerda) Ex: CEP – inteiro de 8 d´ıgitos Note que cada elemento da entrada ter um comprimento m´aximo constante o torna independente de n Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 12 / 18
  • 111. Radix Sort Pressuposto: O Radix Sort assume que cada um dos n elementos da entrada ´e um inteiro de, no m´aximo, d d´ıgitos (d constante) Onde o d´ıgito 1 ´e o menos significativo (direita) e o d´ıgito d o mais significativo (esquerda) Ex: CEP – inteiro de 8 d´ıgitos Note que cada elemento da entrada ter um comprimento m´aximo constante o torna independente de n Independente do tamanho da pr´opria entrada Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 12 / 18
  • 112. Radix Sort Funcionamento Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 13 / 18
  • 113. Radix Sort Funcionamento 1 Ordene os valores primeiro pelo d´ıgito menos significativo Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 13 / 18
  • 114. Radix Sort Funcionamento 1 Ordene os valores primeiro pelo d´ıgito menos significativo 2 Repita a opera¸c˜ao para o segundo d´ıgito menos significativo Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 13 / 18
  • 115. Radix Sort Funcionamento 1 Ordene os valores primeiro pelo d´ıgito menos significativo 2 Repita a opera¸c˜ao para o segundo d´ıgito menos significativo 3 Continue at´e ter passado por todos os d´ıgitos Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 13 / 18
  • 116. Radix Sort Funcionamento 1 Ordene os valores primeiro pelo d´ıgito menos significativo 2 Repita a opera¸c˜ao para o segundo d´ıgito menos significativo 3 Continue at´e ter passado por todos os d´ıgitos Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 13 / 18
  • 117. Radix Sort Funcionamento 1 Ordene os valores primeiro pelo d´ıgito menos significativo 2 Repita a opera¸c˜ao para o segundo d´ıgito menos significativo 3 Continue at´e ter passado por todos os d´ıgitos Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 13 / 18
  • 118. Radix Sort Funcionamento 1 Ordene os valores primeiro pelo d´ıgito menos significativo 2 Repita a opera¸c˜ao para o segundo d´ıgito menos significativo 3 Continue at´e ter passado por todos os d´ıgitos Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 13 / 18
  • 119. Radix Sort Funcionamento 1 Ordene os valores primeiro pelo d´ıgito menos significativo 2 Repita a opera¸c˜ao para o segundo d´ıgito menos significativo 3 Continue at´e ter passado por todos os d´ıgitos Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 13 / 18
  • 120. Radix Sort Funcionamento Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 14 / 18
  • 121. Radix Sort Funcionamento Para que isso funcione, ´e essencial que a ordena¸c˜ao dos d´ıgitos seja est´avel Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 14 / 18
  • 122. Radix Sort Funcionamento Para que isso funcione, ´e essencial que a ordena¸c˜ao dos d´ıgitos seja est´avel De modo a manter a ordem dos d´ıgitos menos significativos j´a ordenados Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 14 / 18
  • 123. Radix Sort Funcionamento Para que isso funcione, ´e essencial que a ordena¸c˜ao dos d´ıgitos seja est´avel De modo a manter a ordem dos d´ıgitos menos significativos j´a ordenados Ex: Counting Sort e QuickSort (se implementado para tal) Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 14 / 18
  • 124. Radix Sort Algoritmo radixSort(A, d): para i = 1 at´e d: use um m´etodo est´avel para ordenar o arranjo A no digito i Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 15 / 18
  • 125. Radix Sort Algoritmo radixSort(A, d): para i = 1 at´e d: use um m´etodo est´avel para ordenar o arranjo A no digito i E qual a complexidade disso? Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 15 / 18
  • 126. Radix Sort Algoritmo radixSort(A, d): para i = 1 at´e d: use um m´etodo est´avel para ordenar o arranjo A no digito i E qual a complexidade disso? O(1) Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 15 / 18
  • 127. Radix Sort Algoritmo radixSort(A, d): para i = 1 at´e d: use um m´etodo est´avel para ordenar o arranjo A no digito i E qual a complexidade disso? O(1)×O(f (n)), onde O(f (n)) ´e a complexidade do algoritmo de ordena¸c˜ao usado Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 15 / 18
  • 128. Radix Sort Algoritmo radixSort(A, d): para i = 1 at´e d: use um m´etodo est´avel para ordenar o arranjo A no digito i E qual a complexidade disso? O(1)×O(f (n)), onde O(f (n)) ´e a complexidade do algoritmo de ordena¸c˜ao usado Se este for o Counting Sort, em sua vers˜ao linear, ent˜ao O(f (n)) = O(n), e o Radix Sort ser´a O(n) Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 15 / 18
  • 129. Radix Sort Observa¸c˜oes Antigamente usado nas m´aquinas mecˆanicas de ordenar cartas Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 16 / 18
  • 130. Radix Sort Observa¸c˜oes Antigamente usado nas m´aquinas mecˆanicas de ordenar cartas Hoje, por vezes usado para ordenar registros de informa¸c˜ao que possuem m´ultiplas chaves Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 16 / 18
  • 131. Radix Sort Observa¸c˜oes Antigamente usado nas m´aquinas mecˆanicas de ordenar cartas Hoje, por vezes usado para ordenar registros de informa¸c˜ao que possuem m´ultiplas chaves Ex: datas Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 16 / 18
  • 132. Radix Sort Observa¸c˜oes Antigamente usado nas m´aquinas mecˆanicas de ordenar cartas Hoje, por vezes usado para ordenar registros de informa¸c˜ao que possuem m´ultiplas chaves Ex: datas Podemos usar um algoritmo de ordena¸c˜ao cuja fun¸c˜ao de compara¸c˜ao retorne a maior de duas dadas, comparando ano e, em caso de empate, mˆes e, em caso de empate, dia Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 16 / 18
  • 133. Radix Sort Observa¸c˜oes Antigamente usado nas m´aquinas mecˆanicas de ordenar cartas Hoje, por vezes usado para ordenar registros de informa¸c˜ao que possuem m´ultiplas chaves Ex: datas Podemos usar um algoritmo de ordena¸c˜ao cuja fun¸c˜ao de compara¸c˜ao retorne a maior de duas dadas, comparando ano e, em caso de empate, mˆes e, em caso de empate, dia Ou ordenar a informa¸c˜ao 3 vezes com um m´etodo est´avel de ordena¸c˜ao: primeiro no dia, em seguida no mˆes, e ent˜ao no ano Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 16 / 18
  • 134. Radix Sort Observa¸c˜oes Altamente dependente do m´etodo usado para ordenar os d´ıgitos Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 17 / 18
  • 135. Radix Sort Observa¸c˜oes Altamente dependente do m´etodo usado para ordenar os d´ıgitos Com impacto direto em sua complexidade Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 17 / 18
  • 136. Radix Sort Observa¸c˜oes Altamente dependente do m´etodo usado para ordenar os d´ıgitos Com impacto direto em sua complexidade Se usado com Counting sort: Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 17 / 18
  • 137. Radix Sort Observa¸c˜oes Altamente dependente do m´etodo usado para ordenar os d´ıgitos Com impacto direto em sua complexidade Se usado com Counting sort: Tem complexidade linear Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 17 / 18
  • 138. Radix Sort Observa¸c˜oes Altamente dependente do m´etodo usado para ordenar os d´ıgitos Com impacto direto em sua complexidade Se usado com Counting sort: Tem complexidade linear N˜ao ´e in-place, criando diversos arranjos auxiliares na mem´oria Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 17 / 18
  • 139. Referˆencias Cormen, Thomas H., Leiserson, Charles E., Rivest, Ronald L., Stein, Clifford. Introduction to Algorithms. 2a ed. MIT Press, 2001. https://www.geeksforgeeks.org/radix-sort/ Norton Trevisan Romannorton@usp.br Aula 18 – Algoritmos de Ordena¸c˜ao: CountingSort e RadixSort25 de outubro de 2018 18 / 18