SlideShare uma empresa Scribd logo
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 19
Norton 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 09
Norton Trevisan Roman
 
Apresentacao countingsort
Apresentacao countingsortApresentacao countingsort
Apresentacao countingsort
micael
 
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
Delacyr 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 10
Norton 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 02
Norton 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 07
Norton Trevisan Roman
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
Thallyah Biersack
 
Aula 3-lógica.pptx
Aula 3-lógica.pptxAula 3-lógica.pptx
Aula 3-lógica.pptx
GustavoBarrosLins1
 

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 24
Norton 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 23
Norton 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 22
Norton 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 21
Norton 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 20
Norton 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 19
Norton 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 18
Norton 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 17
Norton 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 16
Norton 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 15
Norton 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 14
Norton 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 13
Norton 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 12
Norton 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 11
Norton 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 10
Norton 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 09
Norton 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 08
Norton 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 07
Norton 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 06
Norton 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 05
Norton 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

Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptxAula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
edivirgesribeiro1
 
livro ciclo da agua educação infantil.pdf
livro ciclo da agua educação infantil.pdflivro ciclo da agua educação infantil.pdf
livro ciclo da agua educação infantil.pdf
cmeioctaciliabetesch
 
PP Slides Lição 11, Betel, Ordenança para exercer a fé, 2Tr24.pptx
PP Slides Lição 11, Betel, Ordenança para exercer a fé, 2Tr24.pptxPP Slides Lição 11, Betel, Ordenança para exercer a fé, 2Tr24.pptx
PP Slides Lição 11, Betel, Ordenança para exercer a fé, 2Tr24.pptx
LuizHenriquedeAlmeid6
 
Introdução à Sociologia: caça-palavras na escola
Introdução à Sociologia: caça-palavras na escolaIntrodução à Sociologia: caça-palavras na escola
Introdução à Sociologia: caça-palavras na escola
Professor Belinaso
 
05-os-pre-socraticos sociologia-28-slides.pptx
05-os-pre-socraticos sociologia-28-slides.pptx05-os-pre-socraticos sociologia-28-slides.pptx
05-os-pre-socraticos sociologia-28-slides.pptx
ValdineyRodriguesBez1
 
Leis de Mendel - as ervilhas e a maneira simples de entender.ppt
Leis de Mendel - as ervilhas e a maneira simples de entender.pptLeis de Mendel - as ervilhas e a maneira simples de entender.ppt
Leis de Mendel - as ervilhas e a maneira simples de entender.ppt
PatriciaZanoli
 
Aula 2 - Revisando o significado de fração - Parte 2.pptx
Aula 2 - Revisando o significado de fração - Parte 2.pptxAula 2 - Revisando o significado de fração - Parte 2.pptx
Aula 2 - Revisando o significado de fração - Parte 2.pptx
LILIANPRESTESSCUDELE
 
A QUESTÃO ANTROPOLÓGICA: O QUE SOMOS OU QUEM SOMOS.pdf
A QUESTÃO ANTROPOLÓGICA: O QUE SOMOS OU QUEM SOMOS.pdfA QUESTÃO ANTROPOLÓGICA: O QUE SOMOS OU QUEM SOMOS.pdf
A QUESTÃO ANTROPOLÓGICA: O QUE SOMOS OU QUEM SOMOS.pdf
AurelianoFerreirades2
 
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
MessiasMarianoG
 
000. Para rezar o terço - Junho - mês do Sagrado Coração de Jesús.pdf
000. Para rezar o terço - Junho - mês do Sagrado Coração de Jesús.pdf000. Para rezar o terço - Junho - mês do Sagrado Coração de Jesús.pdf
000. Para rezar o terço - Junho - mês do Sagrado Coração de Jesús.pdf
YeniferGarcia36
 
Treinamento NR 38 - CORPO PRINCIPAL da NORMA.pptx
Treinamento NR 38 - CORPO PRINCIPAL da NORMA.pptxTreinamento NR 38 - CORPO PRINCIPAL da NORMA.pptx
Treinamento NR 38 - CORPO PRINCIPAL da NORMA.pptx
MarcosPaulo777883
 
UFCD_10145_Enquadramento do setor farmacêutico_indice.pdf
UFCD_10145_Enquadramento do setor farmacêutico_indice.pdfUFCD_10145_Enquadramento do setor farmacêutico_indice.pdf
UFCD_10145_Enquadramento do setor farmacêutico_indice.pdf
Manuais Formação
 
Testes + soluções_Mensagens12 )11111.pdf
Testes + soluções_Mensagens12 )11111.pdfTestes + soluções_Mensagens12 )11111.pdf
Testes + soluções_Mensagens12 )11111.pdf
lveiga112
 
- TEMPLATE DA PRATICA - Psicomotricidade.pptx
- TEMPLATE DA PRATICA - Psicomotricidade.pptx- TEMPLATE DA PRATICA - Psicomotricidade.pptx
- TEMPLATE DA PRATICA - Psicomotricidade.pptx
LucianaCristina58
 
Leonardo da Vinci .pptx
Leonardo da Vinci                  .pptxLeonardo da Vinci                  .pptx
Leonardo da Vinci .pptx
TomasSousa7
 
Educação trabalho HQ em sala de aula uma excelente ideia
Educação  trabalho HQ em sala de aula uma excelente  ideiaEducação  trabalho HQ em sala de aula uma excelente  ideia
Educação trabalho HQ em sala de aula uma excelente ideia
joseanesouza36
 
Reino-Vegetal plantas e demais conceitos .pptx
Reino-Vegetal plantas e demais conceitos .pptxReino-Vegetal plantas e demais conceitos .pptx
Reino-Vegetal plantas e demais conceitos .pptx
CarinaSantos916505
 
Famílias Que Contribuíram Para O Crescimento Do Assaré
Famílias Que Contribuíram Para O Crescimento Do AssaréFamílias Que Contribuíram Para O Crescimento Do Assaré
Famílias Que Contribuíram Para O Crescimento Do Assaré
profesfrancleite
 
CRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdf
CRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdfCRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdf
CRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdf
soaresdesouzaamanda8
 
epidemias endemia-pandemia-e-epidemia (1).ppt
epidemias endemia-pandemia-e-epidemia (1).pptepidemias endemia-pandemia-e-epidemia (1).ppt
epidemias endemia-pandemia-e-epidemia (1).ppt
MarceloMonteiro213738
 

Último (20)

Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptxAula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
 
livro ciclo da agua educação infantil.pdf
livro ciclo da agua educação infantil.pdflivro ciclo da agua educação infantil.pdf
livro ciclo da agua educação infantil.pdf
 
PP Slides Lição 11, Betel, Ordenança para exercer a fé, 2Tr24.pptx
PP Slides Lição 11, Betel, Ordenança para exercer a fé, 2Tr24.pptxPP Slides Lição 11, Betel, Ordenança para exercer a fé, 2Tr24.pptx
PP Slides Lição 11, Betel, Ordenança para exercer a fé, 2Tr24.pptx
 
Introdução à Sociologia: caça-palavras na escola
Introdução à Sociologia: caça-palavras na escolaIntrodução à Sociologia: caça-palavras na escola
Introdução à Sociologia: caça-palavras na escola
 
05-os-pre-socraticos sociologia-28-slides.pptx
05-os-pre-socraticos sociologia-28-slides.pptx05-os-pre-socraticos sociologia-28-slides.pptx
05-os-pre-socraticos sociologia-28-slides.pptx
 
Leis de Mendel - as ervilhas e a maneira simples de entender.ppt
Leis de Mendel - as ervilhas e a maneira simples de entender.pptLeis de Mendel - as ervilhas e a maneira simples de entender.ppt
Leis de Mendel - as ervilhas e a maneira simples de entender.ppt
 
Aula 2 - Revisando o significado de fração - Parte 2.pptx
Aula 2 - Revisando o significado de fração - Parte 2.pptxAula 2 - Revisando o significado de fração - Parte 2.pptx
Aula 2 - Revisando o significado de fração - Parte 2.pptx
 
A QUESTÃO ANTROPOLÓGICA: O QUE SOMOS OU QUEM SOMOS.pdf
A QUESTÃO ANTROPOLÓGICA: O QUE SOMOS OU QUEM SOMOS.pdfA QUESTÃO ANTROPOLÓGICA: O QUE SOMOS OU QUEM SOMOS.pdf
A QUESTÃO ANTROPOLÓGICA: O QUE SOMOS OU QUEM SOMOS.pdf
 
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
 
000. Para rezar o terço - Junho - mês do Sagrado Coração de Jesús.pdf
000. Para rezar o terço - Junho - mês do Sagrado Coração de Jesús.pdf000. Para rezar o terço - Junho - mês do Sagrado Coração de Jesús.pdf
000. Para rezar o terço - Junho - mês do Sagrado Coração de Jesús.pdf
 
Treinamento NR 38 - CORPO PRINCIPAL da NORMA.pptx
Treinamento NR 38 - CORPO PRINCIPAL da NORMA.pptxTreinamento NR 38 - CORPO PRINCIPAL da NORMA.pptx
Treinamento NR 38 - CORPO PRINCIPAL da NORMA.pptx
 
UFCD_10145_Enquadramento do setor farmacêutico_indice.pdf
UFCD_10145_Enquadramento do setor farmacêutico_indice.pdfUFCD_10145_Enquadramento do setor farmacêutico_indice.pdf
UFCD_10145_Enquadramento do setor farmacêutico_indice.pdf
 
Testes + soluções_Mensagens12 )11111.pdf
Testes + soluções_Mensagens12 )11111.pdfTestes + soluções_Mensagens12 )11111.pdf
Testes + soluções_Mensagens12 )11111.pdf
 
- TEMPLATE DA PRATICA - Psicomotricidade.pptx
- TEMPLATE DA PRATICA - Psicomotricidade.pptx- TEMPLATE DA PRATICA - Psicomotricidade.pptx
- TEMPLATE DA PRATICA - Psicomotricidade.pptx
 
Leonardo da Vinci .pptx
Leonardo da Vinci                  .pptxLeonardo da Vinci                  .pptx
Leonardo da Vinci .pptx
 
Educação trabalho HQ em sala de aula uma excelente ideia
Educação  trabalho HQ em sala de aula uma excelente  ideiaEducação  trabalho HQ em sala de aula uma excelente  ideia
Educação trabalho HQ em sala de aula uma excelente ideia
 
Reino-Vegetal plantas e demais conceitos .pptx
Reino-Vegetal plantas e demais conceitos .pptxReino-Vegetal plantas e demais conceitos .pptx
Reino-Vegetal plantas e demais conceitos .pptx
 
Famílias Que Contribuíram Para O Crescimento Do Assaré
Famílias Que Contribuíram Para O Crescimento Do AssaréFamílias Que Contribuíram Para O Crescimento Do Assaré
Famílias Que Contribuíram Para O Crescimento Do Assaré
 
CRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdf
CRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdfCRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdf
CRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdf
 
epidemias endemia-pandemia-e-epidemia (1).ppt
epidemias endemia-pandemia-e-epidemia (1).pptepidemias endemia-pandemia-e-epidemia (1).ppt
epidemias endemia-pandemia-e-epidemia (1).ppt
 

(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