Este material é uma introdução aos conceitos, técnicas e recursos fundamentais para a manipulação de cadeia de caracteres, pilhas, listas, filas, tabela hash e grafos, bem como a pesquisa e ordenação de dados.
Aulas TSI32B - Estrutura, Pesquisa e Ordenação de Dados (TSI UTFPR-Toledo)
1. TSI - Tecnologia em Sistemas para InternetTSI - Tecnologia em Sistemas para Internet
TSI32B – Estrutura, Pesquisa e Ordenação de DadosTSI32B – Estrutura, Pesquisa e Ordenação de Dados
Prof. Me. Sidgley Camargo de AndradeProf. Me. Sidgley Camargo de Andrade
http://pessoal.utfpr.edu.br/sidgleyandrade
2. TSI33A - Banco de Dados I 2/64
AtençãoAtenção
Este material é uma introdução aos conceitos, técnicas e recursos fundamentais para aEste material é uma introdução aos conceitos, técnicas e recursos fundamentais para a
manipulação de cadeia de caracteres, pilhas, listas, filas, tabela hash e grafos, bemmanipulação de cadeia de caracteres, pilhas, listas, filas, tabela hash e grafos, bem
como a pesquisa e ordenação de dados.como a pesquisa e ordenação de dados.
Organização do material:Organização do material:
Semana 01 Cadeia de Caracteres em Java Semana 07 Em desenvolvimento
Semana 02 Ordenação Interna – Parte I Semana 08 Em desenvolvimento
Semana 03
Ordenação Interna – Parte II (em
desenvolvimento)
Semana 09 Em desenvolvimento
Semana 04 Em desenvolvimento Semana 10 Em desenvolvimento
Semana 05 Em desenvolvimento Semana 11 Em desenvolvimento
Semana 06 Em desenvolvimento
Semana 12
Semana 13
Em desenvolvimento
3. TSI33A – Banco de Dados 1TSI33A – Banco de Dados 1
Cadeia de Caracteres em JavaCadeia de Caracteres em Java
Prof. Me. Sidgley Camargo de Andrade
Semana 01
4. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 44//6464
1.1. CharChar
● Um únicoúnico valor de caracter corresponde ao tipo primitivotipo primitivo char:
●
Um char é um valor de 8 bits8 bits, que pode assumir valores entre 00 e
255255. Tabelas padronizadas estabelecem correspondências entre valores
numéricos e símbolos gráficos (e.g. ASCII estendidaASCII estendida)
char ch = 'T';
// Unicode for uppercase Greek omega character -> Ω
char uniChar = 'u03A9';
// an array of chars
char[] charArray = { 'T', 'S', 'I', '3', '2', 'B' };
char ch = 'T';
// Unicode for uppercase Greek omega character -> Ω
char uniChar = 'u03A9';
// an array of chars
char[] charArray = { 'T', 'S', 'I', '3', '2', 'B' };
short i;
System.out.print("Dec tCharn");
for(i=32;i<255;i++) {
ch = (char) i;
System.out.format("%dt%cn",i,ch);
}
short i;
System.out.print("Dec tCharn");
for(i=32;i<255;i++) {
ch = (char) i;
System.out.format("%dt%cn",i,ch);
}
5. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 55//6464
char como Objetoscomo Objetos
● Em orientação a objetos é possível usar um charchar como um objeto (e.g.
argumento de um método em que se espera um objeto do tipo charchar).
● Um objeto do tipo de caracteres contém um único campo, cujo tipo é
charchar, e uma série de métodos de manipulaçãométodos de manipulação de caracteres.
● O compilador Javacompilador Java converte automaticamente para um objetoobjeto charchar
quando um charchar primitivoprimitivo for atribuído a um objeto (i.e. autoboxingautoboxing ou
unboxingunboxing).
Character ch = new Character('t');Character ch = new Character('t');
Character ch = 't';Character ch = 't';
Atenção!Atenção!
A classeA classe CharacterCharacter é imutável, uma vez criado o objeto não pode seré imutável, uma vez criado o objeto não pode ser
alterado.alterado.
Atenção!Atenção!
A classeA classe CharacterCharacter é imutável, uma vez criado o objeto não pode seré imutável, uma vez criado o objeto não pode ser
alterado.alterado.
6. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 66//6464
MétodosMétodos staticstatic da Classeda Classe Character
● Determina se o valor do charchar é uma letraletra ou um dígitodígito
● Determina se o valor do charchar é uma letraletra ou dígitodígito
Character ch = 'a';
System.out.println(Character.isLetter(ch)); // true
System.out.println(Character.isDigit(ch)); // false
Character ch = 'a';
System.out.println(Character.isLetter(ch)); // true
System.out.println(Character.isDigit(ch)); // false
boolean isLetter(char ch);
boolean isDigit(char ch);
boolean isLetter(char ch);
boolean isDigit(char ch);
Método
Character ch = '%';
System.out.println(Character.isLetterOrDigit(ch)); // false
Character ch = '%';
System.out.println(Character.isLetterOrDigit(ch)); // false
boolean isLetterOrDigit(char ch);boolean isLetterOrDigit(char ch);Método
7. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 77//6464
MétodosMétodos staticstatic da Classeda Classe Character +
● Determina se o valor do charchar é um espaço em brancoespaço em branco
● Determina se o valor do charchar é uma letra maiúsculamaiúscula ou minúsculaminúscula
Character ch = 'a';
System.out.println(Character.isUpperCase(ch)); // false
System.out.println(Character.isLowerCase(ch)); // true
Character ch = 'a';
System.out.println(Character.isUpperCase(ch)); // false
System.out.println(Character.isLowerCase(ch)); // true
boolean isUpperCase(char ch);
boolean isLowerCase(char ch);
boolean isUpperCase(char ch);
boolean isLowerCase(char ch);
Character ch = 'a';
System.out.println(Character.isWhitespace(ch)); // false
Character ch = 'a';
System.out.println(Character.isWhitespace(ch)); // false
boolean isWhitespace(char ch);boolean isWhitespace(char ch);Método
Método
8. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 88//6464
MétodosMétodos staticstatic da Classeda Classe Character ++
● Retorna a maiúsculamaiúscula ou minúsculaminúscula do valor charchar
Character ch = new Character('a');
ch = Character.toUpperCase(ch);
System.out.println( ch ); // 'A'
ch = Character.toUpperCase(ch);
System.out.println( ch ); // 'a'
Character ch = new Character('a');
ch = Character.toUpperCase(ch);
System.out.println( ch ); // 'A'
ch = Character.toUpperCase(ch);
System.out.println( ch ); // 'a'
char toUpperCase(char ch);
char toLowerCase(char ch);
char toUpperCase(char ch);
char toLowerCase(char ch);
Método
9. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 99//6464
MétodosMétodos instanceinstance da Classeda Classe Character
● Retorna um objetoobjeto StringString do objeto — StringString de charchar
●
ComparaCompara dois objetos de charchar numericamente
String s = new String( ch.toString() );
System.out.println( ch ); // "a"
String s = new String( ch.toString() );
System.out.println( ch ); // "a"
toString(char ch);toString(char ch);
Character ch = new Character('a');
System.out.println( ch.compareTo('a') ); // 0 (igual) >0< (diferente)
Character ch = new Character('a');
System.out.println( ch.compareTo('a') ); // 0 (igual) >0< (diferente)
int CompareTo(char anotherCharacter);int CompareTo(char anotherCharacter);
Atenção!Atenção!
A lista completa dos métodos está disponível no endereçoA lista completa dos métodos está disponível no endereço
http://docs.oracle.com/javase/8/docs/api/java/lang/Character.htmlhttp://docs.oracle.com/javase/8/docs/api/java/lang/Character.html
Atenção!Atenção!
A lista completa dos métodos está disponível no endereçoA lista completa dos métodos está disponível no endereço
http://docs.oracle.com/javase/8/docs/api/java/lang/Character.htmlhttp://docs.oracle.com/javase/8/docs/api/java/lang/Character.html
Método
Método
10. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 1010//6464
2. Cadeia de Caracteres (2. Cadeia de Caracteres (StringString))
● Cadeia de caracteres ou StringString é amplamente utilizada na
programação.
● É representada como um arrayarray de caracteres codificados seguindo uma
tabela de código de caracteres (e.g. ASCII).
– No terminal do GNU-Linux exetue: man ascci
● Em Java, StringsStrings são objetosobjetos, portanto, possuem um conjunto
de métodos de manipulaçãométodos de manipulação.
Atenção!Atenção!
A classeA classe StringString é imutável, portanto, uma vez que é criado um objetoé imutável, portanto, uma vez que é criado um objeto
StringString este não pode ser alterado. Desta forma, os métodos dessaeste não pode ser alterado. Desta forma, os métodos dessa
classe retornam sempre uma nova string que contém o resultado daclasse retornam sempre uma nova string que contém o resultado da
operação.operação.
Atenção!Atenção!
A classeA classe StringString é imutável, portanto, uma vez que é criado um objetoé imutável, portanto, uma vez que é criado um objeto
StringString este não pode ser alterado. Desta forma, os métodos dessaeste não pode ser alterado. Desta forma, os métodos dessa
classe retornam sempre uma nova string que contém o resultado daclasse retornam sempre uma nova string que contém o resultado da
operação.operação.
11. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 1111//6464
CriandoCriando StringsStrings
● Como uma série de caracterescaracteres delimitados por aspas duplas (StringString
literalliteral)
● Como uma objeto (newnew + construtorconstrutor)
String disciplina = "TSI32B";
System.out.println(disciplina);
String disciplina = "TSI32B";
System.out.println(disciplina);
OO autoboxingautoboxing também é aplicada paratambém é aplicada para StringsStringsOO autoboxingautoboxing também é aplicada paratambém é aplicada para StringsStrings
char[] discArray = { 'T', 'S', 'I', '3', '2', 'B' };
String discString = new String(discArray);
System.out.println(discString);
char[] discArray = { 'T', 'S', 'I', '3', '2', 'B' };
String discString = new String(discArray);
System.out.println(discString);
String disciplina = new String("TSI32B");
System.out.println(disciplina);
String disciplina = new String("TSI32B");
System.out.println(disciplina);
OUOU
12. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 1212//6464
Sequência deSequência de SCAPESCAPE
● Um caracter precedido por uma barra invertida é uma sequência de
escape, e tem um significado especial para o compilador.
t Insere um tab no texto
b Insere um backspace no texto
n Insere uma nova linha no texto
r Insere um retorno de carro no texto
f Insere uma formatação no texto
' Insere uma aspa simples no texto
" Insere uma aspa dupla no texto
Insere uma barra invertida no texto
System.out.println("Disciplinat"TSI32B"");
// Disciplina "TSI32B"
System.out.println("Disciplinat"TSI32B"");
// Disciplina "TSI32B"
String disciplina = "DisciplinanTSI32B";
System.out.println(disciplina);
// Disciplina
// TSI32B
String disciplina = "DisciplinanTSI32B";
System.out.println(disciplina);
// Disciplina
// TSI32B
13. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 1313//6464
3. Conversão3. Conversão String para númeropara número
● Através do método estático valueOf(valueOf(str)) das subclasses de
números (ByteByte, IntegerInteger, DoubleDouble, FloatFloat, LongLong e ShortShort).
● Através do método estático parse<Tipo>(parse<Tipo>(str)) das subclasses de
números.
byte vByte = Byte.valueOf(str).byteValue();
int vInt = Integer.valueOf(str).intValue();
double vFloat = Float.valueOf(str).floatValue();
double vDouble = Double.valueOf(str).doubleValue();
long vLong = Long.valueOf(str).longValue();
short vShort = Short.valueOf(str).shortValue();
byte vByte = Byte.valueOf(str).byteValue();
int vInt = Integer.valueOf(str).intValue();
double vFloat = Float.valueOf(str).floatValue();
double vDouble = Double.valueOf(str).doubleValue();
long vLong = Long.valueOf(str).longValue();
short vShort = Short.valueOf(str).shortValue();
byte vByte = Byte.parseByte(str);
int vInt = Integer.parseInt(str);
double vFloat = Float.parseFloat(str);
double vDouble = Double.parseDouble(str);
long vLong = Long.parseLong(str);
short vShort = Short.parseShort(str);
byte vByte = Byte.parseByte(str);
int vInt = Integer.parseInt(str);
double vFloat = Float.parseFloat(str);
double vDouble = Double.parseDouble(str);
long vLong = Long.parseLong(str);
short vShort = Short.parseShort(str);
OUOU
14. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 1414//6464
4. Conversão número para4. Conversão número para String
● Através do método estático toString(toString(num)) das subclasses de números.
● Através da concatenação com uma string vazia (casting forçadocasting forçado)
● Através do método estático valueOf(valueOf(num))
str = Byte.toString(vByte);
str = Integer.toString(vInt);
str = Float.toString(vFloat);
str = Double.toString(vDouble);
str = Long.toString(vLong);
str = Short.toString(vShort);
str = Byte.toString(vByte);
str = Integer.toString(vInt);
str = Float.toString(vFloat);
str = Double.toString(vDouble);
str = Long.toString(vLong);
str = Short.toString(vShort);
String str = "" + vByte;
String str = "" + vInt;
String str = "" + vFloat;
String str = "" + vByte;
String str = "" + vInt;
String str = "" + vFloat;
OUOU
OUOU
String str = String.valueOf(vByte);
String str = String.valueOf(vInt);
String str = String.valueOf(vFloat);
String str = String.valueOf(vByte);
String str = String.valueOf(vInt);
String str = String.valueOf(vFloat);
15. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 1515//6464
5. Manipulando5. Manipulando Strings
● A classe StringString possui um conjunto de métodos para
– examinar o conteúdoexaminar o conteúdo de strings,
– encontrar caracteres ou substringsencontrar caracteres ou substrings dentro de uma String,
– entre outras operaçõesoutras operações necessária no dia a dia do desenvolver
Java.
16. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 1616//6464
Coletando umColetando um CaracterCaracter
String anotherPalindrome = "Niagara. O roar again!";
char aChar = anotherPalindrome.charAt(9);
String anotherPalindrome = "Niagara. O roar again!";
char aChar = anotherPalindrome.charAt(9);
Qual caracter será exibido comQual caracter será exibido com
a execução do comandoa execução do comando
System.out.print(aChar)System.out.print(aChar)??
Qual caracter será exibido com a execução do comandoQual caracter será exibido com a execução do comando
System.out.print(System.out.print(anotherPalindrome.charAt(anotherPalindrome.length()/2)))??
17. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 1717//6464
Coletando umaColetando uma SubstringSubstring
String anotherPalindrome = "Niagara. O roar again!";
String roar = anotherPalindrome.substring(11, 15);
String anotherPalindrome = "Niagara. O roar again!";
String roar = anotherPalindrome.substring(11, 15);
String anotherPalindrome = "Niagara. O roar again!";
String roar = anotherPalindrome.substring(11);
String anotherPalindrome = "Niagara. O roar again!";
String roar = anotherPalindrome.substring(11);
18. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 1818//6464
Outros Exemplos de ManipulaçãoOutros Exemplos de Manipulação
● Retorna uma StringString removendoremovendo da esquerda e direita os espaços em
branco
● Retorna uma SStringtring convertida para minúsculaminúscula
String anotherPalindrome = "Niagara. O roar again!";
String roar = anotherPalindrome.substring(10, 15).trim();
String anotherPalindrome = "Niagara. O roar again!";
String roar = anotherPalindrome.substring(10, 15).trim();
String palindrome = "Niagara. O roar again!";
palindrome = palindrome.toLowerCase();
String palindrome = "Niagara. O roar again!";
palindrome = palindrome.toLowerCase();
19. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 1919//6464
Documentação da ClasseDocumentação da Classe String
Atenção!Atenção!
A lista completa dos métodos está disponível no endereçoA lista completa dos métodos está disponível no endereço
http://docs.oracle.com/javase/8/docs/api/java/lang/String.htmlhttp://docs.oracle.com/javase/8/docs/api/java/lang/String.html
Atenção!Atenção!
A lista completa dos métodos está disponível no endereçoA lista completa dos métodos está disponível no endereço
http://docs.oracle.com/javase/8/docs/api/java/lang/String.htmlhttp://docs.oracle.com/javase/8/docs/api/java/lang/String.html
20. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 2020//6464
MétodosMétodos instanceinstance da Classeda Classe String
●
ComparaCompara duas stringsstrings de forma lexicográfica
●
ComparaCompara dois objetos de stringsstrings
String str = new String("TSI32B");
System.out.println(str.compareTo("tsi32b")); // != 0 (diferente)
System.out.println(str.compareToIgnoreCase("tsi32b")); // 0 (igual)
String str = new String("TSI32B");
System.out.println(str.compareTo("tsi32b")); // != 0 (diferente)
System.out.println(str.compareToIgnoreCase("tsi32b")); // 0 (igual)
int compareTo(String anotherString);
int compareToIgnoreCase(String anotherString);
int compareTo(String anotherString);
int compareToIgnoreCase(String anotherString);
String str = new String("TSI32B");
System.out.println(str.equals("tsi32b")); // false
System.out.println(str.equalsIgnoreCase("tsi32b")); // true
String str = new String("TSI32B");
System.out.println(str.equals("tsi32b")); // false
System.out.println(str.equalsIgnoreCase("tsi32b")); // true
boolean equals(String anotherString);
boolean equalsIgnoreCase(String anotherString);
boolean equals(String anotherString);
boolean equalsIgnoreCase(String anotherString);
Método
Método
21. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 2121//6464
MétodosMétodos instanceinstance da Classeda Classe String +
● Retorna o valor do caractere de uma posiçãoposição específica da stringstring
● Retorna a posiçãoposição específica de um caracter ou substringsubstring dentro da
stringstring
String str = new String("TSI32B");
System.out.print(str.charAt(0)); // 'T'
System.out.print(str.charAt(6)); // String index out of range: 6
String str = new String("TSI32B");
System.out.print(str.charAt(0)); // 'T'
System.out.print(str.charAt(6)); // String index out of range: 6
char charAt(int index);char charAt(int index);
String str = new String("TSI32B");
System.out.print(str.indexOf("S")); // 1
System.out.print(str.indexOf("SB")); // -1 (não encontrou)
String str = new String("TSI32B");
System.out.print(str.indexOf("S")); // 1
System.out.print(str.indexOf("SB")); // -1 (não encontrou)
int indexOf(String str); (primeira ocorrência)
int lastIndexOf(String str); (última ocorrência)
int indexOf(String str); (primeira ocorrência)
int lastIndexOf(String str); (última ocorrência)
Método
Método
22. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 2222//6464
MétodosMétodos instanceinstance da Classeda Classe String ++
● Testa se a string termina com um sufixo específico
● Retorna truetrue se length()length() é 0
String str = new String("TSI32B");
System.out.print(str.endsWith("32b")); // false
String str = new String("TSI32B");
System.out.print(str.endsWith("32b")); // false
boolean endsWith(String suffix);boolean endsWith(String suffix);
String str = new String();
System.out.print(str.isEmpty()); // true
str = "TSI32B";
System.out.print(str.isEmpty()); // false
String str = new String();
System.out.print(str.isEmpty()); // true
str = "TSI32B";
System.out.print(str.isEmpty()); // false
booean isEmpty();booean isEmpty();
Método
Método
23. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 2323//6464
MétodosMétodos instanceinstance da Classeda Classe String +++
● Retorna o tamanhotamanho da stringstring
●
ConcatenaConcatena a str2str2 ao final da str1str1
String str = "TSI32B";
System.out.print(str.length()); // 6
String str = "TSI32B";
System.out.print(str.length()); // 6
int length();int length();
String str1 = new String("TSI");
String str2 = new String("32B");
str1 = str1.concat(str2);
System.out.print(str1); // "TSI32B"
String str1 = new String("TSI");
String str2 = new String("32B");
str1 = str1.concat(str2);
System.out.print(str1); // "TSI32B"
String concat(String str);String concat(String str);
Método
Método
24. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 2424//6464
MétodosMétodos instanceinstance da Classeda Classe String ++++
● Retorna um valor lógico se a String contêm a sequência de
caracteres
● Substitui cada caracter ou substringsubstring e retorna uma nova String
String str = "TSI32B";
System.out.print(str.contains("I32"));
String str = "TSI32B";
System.out.print(str.contains("I32"));
boolean contains(CharSequence s);boolean contains(CharSequence s);
String str = "TSI31A";
str = str.replace("31A", "32B");
System.out.print(str);
String str = "TSI31A";
str = str.replace("31A", "32B");
System.out.print(str);
String replace(char oldChar, char newChar);
String replace(CharSequence target, CharSequence replacement);
String replace(char oldChar, char newChar);
String replace(CharSequence target, CharSequence replacement);
Método
Método
25. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 2525//6464
Segmentando oSegmentando o PathPath de um Arquivode um Arquivo
final static String fullPath = "/home/user/index.html";
static String pathSeparator = "/",
extensionSeparator = ".";
public static String extension() {
int dot = fullPath.lastIndexOf(extensionSeparator);
return fullPath.substring(dot + 1);
}
public static String filename() {
int dot = fullPath.lastIndexOf(extensionSeparator);
int sep = fullPath.lastIndexOf(pathSeparator);
return fullPath.substring(sep + 1, dot);
}
public static String path() {
int sep = fullPath.lastIndexOf(pathSeparator);
return fullPath.substring(0, sep);
}
public static void main(String[] args) {
System.out.println("Extension = " + extension());
System.out.println("Filename = " + filename());
System.out.println("Path = " + path());
}
Saída do Programa
Extension = html
Filename = index
Path = /home/user
26. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 2626//6464
6. A Classe6. A Classe StringBuilderStringBuilder
● A classe StringBuilderStringBuilder possui o mesmo propósito da classe
String, contudo, proporciona maior performanceperformance na manipulação de
grandes cadeiasgrandes cadeias de caracteres.
● Internamente, os objetos dessa classe são tratados como um array dearray de
comprimento variávelcomprimento variável.
Atenção!Atenção!
A classeA classe StringBuilderStringBuilder éé mutávelmutável, portanto, uma vez que é criado, portanto, uma vez que é criado
um objetoum objeto StringBuilderStringBuilder este pode ser alterado. Desta forma, oseste pode ser alterado. Desta forma, os
métodos dessa classe não forçam a criação de uma novamétodos dessa classe não forçam a criação de uma nova StringString..
Atenção!Atenção!
A classeA classe StringBuilderStringBuilder éé mutávelmutável, portanto, uma vez que é criado, portanto, uma vez que é criado
um objetoum objeto StringBuilderStringBuilder este pode ser alterado. Desta forma, oseste pode ser alterado. Desta forma, os
métodos dessa classe não forçam a criação de uma novamétodos dessa classe não forçam a criação de uma nova StringString..
27. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 2727//6464
Criação e Capacidade de objetosCriação e Capacidade de objetos StringBuilderStringBuilder
●
CriandoCriando um objeto StringBuilder
●
CapacidadeCapacidade de um objeto StringBuilder
StringBuilder sb = new StringBuilder();StringBuilder sb = new StringBuilder();
OUOU
StringBuilder sb = new StringBuilder("Greetings");StringBuilder sb = new StringBuilder("Greetings");
System.out.print( sb.capacity() );System.out.print( sb.capacity() );
28. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 2828//6464
Inserir valores de objetosInserir valores de objetos StringBuilderStringBuilder
● Métodos para inseririnserir valores no objeto StringBuilder
StringBuilder sb = new StringBuilder();
sb.append("TSI");
sb.append(32);
sb.append('B');
System.out.print(sb); // TSI32B
StringBuilder sb = new StringBuilder();
sb.append("TSI");
sb.append(32);
sb.append('B');
System.out.print(sb); // TSI32B
StringBuilder append(Object obj); // ou tipos primitivosStringBuilder append(Object obj); // ou tipos primitivosMétodo
StringBuilder sb = new StringBuilder();
sb.insert(0,32);
sb.insert(0,"TSI");
sb.insert(5,'B');
System.out.print(sb); // TSI32B
StringBuilder sb = new StringBuilder();
sb.insert(0,32);
sb.insert(0,"TSI");
sb.insert(5,'B');
System.out.print(sb); // TSI32B
StringBuilder insert(int offset, Object obj);StringBuilder insert(int offset, Object obj);Método
29. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 2929//6464
Remover valores de objetosRemover valores de objetos StringBuilderStringBuilder
● Método para removerremover valores do objeto StringBuilder
StringBuilder sb = new StringBuilder("TSI32B");
sb.delete(0,3);
sb.deleteCharAt(2);
System.out.print(sb); // 32
StringBuilder sb = new StringBuilder("TSI32B");
sb.delete(0,3);
sb.deleteCharAt(2);
System.out.print(sb); // 32
StringBuilder delete(int start, int end);
StringBuilder deleteCharAt(int index);
StringBuilder delete(int start, int end);
StringBuilder deleteCharAt(int index);
Método
Atenção!Atenção!
A lista completa dos métodos está disponível no endereçoA lista completa dos métodos está disponível no endereço
http://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.htmlhttp://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html
Atenção!Atenção!
A lista completa dos métodos está disponível no endereçoA lista completa dos métodos está disponível no endereço
http://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.htmlhttp://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html
30. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 3030//6464
Trabalhando comTrabalhando com StringString ee StringBuilderStringBuilder
● As classes StringString e StringBuilderStringBuilder possuem o propósito de
manipulação de Strings, contudo, não possuem os mesmos métodos
(e.g. reverse())
●
Considere a criação do objeto abaixo. Como você reverteriareverteria a palavra
"B23SIT" na ordem inversa com a classe String?
● Com a conversão do objeto s para a classe StringBuilderStringBuilder pode-
se aplicar o métido reversereverse()
String s = new String("B23IST");String s = new String("B23IST");
StringBuilder sb = new StringBuilder(s);
sb.reverse();
System.out.print(sb); // TSI32B
StringBuilder sb = new StringBuilder(s);
sb.reverse();
System.out.print(sb); // TSI32B
31. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 3131//6464
ExercíciosExercícios
● Acesse o endereço abaixo e responsa as questões:
http://docs.oracle.com/javase/tutorial/java/data/QandE/characters-questions.html
●
Em seguida confira o resultado das questões com o gabarito no
endereço
http://docs.oracle.com/javase/tutorial/java/data/QandE/characters-answers.html
32. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 3232//6464
CréditosCréditos
●
MaterialMaterial
– The Java™ Tutorials. 2011. Disponível em:
http://docs.oracle.com/javase/tutorial/java/index.html. Acessado em: 02
jan. 2015.
Trail: Learning the Java Language Lesson: Numbers and Strings→
– Aulas preparadas e disponibilizadas em 2014-1 pelo professor Lucas
Antiqueira (TSI32B 2014-2).
33. TSI33A – Banco de Dados 1TSI33A – Banco de Dados 1
Ordenação Interna – Parte IOrdenação Interna – Parte I
Prof. Me. Sidgley Camargo de Andrade
Semana 02
34. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 3434//6464
1. Ordenação de Dados1. Ordenação de Dados
● A ordenaçãoordenação de dados em um sistema computacional pode ser obtida
pela inserção ordenadainserção ordenada dos dados (A…Z, a…z, 0…9, etc.) ou aplicaçãoaplicação
de algoritmosde algoritmos que ordenam conjuntos de dados existentes.
● A ordem de inserçãoordem de inserção dos dados não é, ou não pode sernão pode ser, uma
preocupação do usuário. Por isso, elementos desordenadosdesordenados são
comuns em sistemas computacionais (e.g.e.g. os clientes são inseridos em
uma base de dados de forma aleatório e não ordenada por nome).
● A partir das situações e dos problemas do mundo real, vários
algoritmos de ordenaçãoalgoritmos de ordenação foram desenvolvidos, consistindo basicamente
em realizar comparações sucessivas e trocar os elementos de posição.
35. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 3535//6464
Por que Ordenar?Por que Ordenar?
● Alguns algoritmos exploram a ordenação dos dados para obter maior
eficiência (desempenho) em sua execução:
– Algoritmos de buscaAlgoritmos de busca
– Algoritmos para identificar e excluir dados duplicadosAlgoritmos para identificar e excluir dados duplicados
– Algoritmos de agrupamento e classificação de dadosAlgoritmos de agrupamento e classificação de dados
Como buscar a palavra “manager” de forma eficiente no dicionário?Como buscar a palavra “manager” de forma eficiente no dicionário?Como buscar a palavra “manager” de forma eficiente no dicionário?Como buscar a palavra “manager” de forma eficiente no dicionário?
Como identificar de forma rápida nomes repetidos em uma lista não ordenada?Como identificar de forma rápida nomes repetidos em uma lista não ordenada?Como identificar de forma rápida nomes repetidos em uma lista não ordenada?Como identificar de forma rápida nomes repetidos em uma lista não ordenada?
Como agrupar os alunos em faixas etárias?Como agrupar os alunos em faixas etárias?Como agrupar os alunos em faixas etárias?Como agrupar os alunos em faixas etárias?
36. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 3636//6464
O que éO que é Ordenação InternaOrdenação Interna??
● A ordenação internaordenação interna envolve dados que estão contidos em memóriaestão contidos em memória
internainterna do computador (memória principal), sendo a origem destes dados a
própria memória interna ou memória externa (arquivos, fitas, etc.).
● Quando o conjunto de dadosconjunto de dados a ser ordenado é maior do que a memóriamaior do que a memória
internainterna, então métodos de ordenação externaordenação externa devem ser aplicados
(conteúdo da Semana 05Semana 05).
● Métodos de ordenação internaordenação interna
insertionSort()insertionSort() selectionSort()selectionSort() bubbleSort()bubbleSort()
mergeSort()mergeSort() heapSort()heapSort() shellSort()shellSort()
radixSort()radixSort() quickSort()quickSort()
etc…
37. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 3737//6464
ConsideraçõesConsiderações
● Por questões didáticas, os materiais sobre ordenação normalmente
trabalham com a ordenação de números,ordenação de números, contudo, os algoritmos deste
material são ampliados para a ordenação de outros tipos primitivostipos primitivos e
Strings.Strings.
– InteirosInteiros: {3, 0, 5, 2, 1, 4}
– ReaisReais: {0.3, 0.0, 0.5, 0.2, 0.1, 0.4}
– StringsStrings: {"Sidgley", "Alexandre", "Fabio", "Wesley", "Eduardo"}
Atenção!Atenção!
Também é possível ordenar objetos a partir de seus atributos.Também é possível ordenar objetos a partir de seus atributos.
Atenção!Atenção!
Também é possível ordenar objetos a partir de seus atributos.Também é possível ordenar objetos a partir de seus atributos.
38. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 3838//6464
2. Classe2. Classe MySortingClassMySortingClass
● Classe principal onde os métodos de ordenação e métodos auxiliares
(swap()swap() , print()print() e isGreater()isGreater()) serão implementados.
class MySortingClass {
// array de objetos (tipos primitivos ou Strings)
private Object[] array = null;
// contrutor de classe para alimentar o array
public MySortingClass(Object[] array) {
this.array = array;
}
// implementação dos métodos de ordenação e auxiliares
}
class MySortingClass {
// array de objetos (tipos primitivos ou Strings)
private Object[] array = null;
// contrutor de classe para alimentar o array
public MySortingClass(Object[] array) {
this.array = array;
}
// implementação dos métodos de ordenação e auxiliares
}
Métodos de usuário
(implementados pelo professor)
39. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 3939//6464
O MétodoO Método swap()swap()
● Como dito anteriormente, os algoritmos de ordenação se resumem em
realizar uma série de comparaçõescomparações e trocastrocas. Portanto, um método de
swap()swap() é especificado:
public void swap (int i, int j) {
Object aux;
aux = array[i];
array[i] = array[j];
array[j] = aux;
}
public void swap (int i, int j) {
Object aux;
aux = array[i];
array[i] = array[j];
array[j] = aux;
}
Função para trocar a posição
dos valores dos índices.
ObjectObject é a superclasse. Podemos substituir
pela calsse String ou pelos tipos primitivos.
40. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 4040//6464
O MétodoO Método isGreater()isGreater()
● Esse método identifica se o parâmetro value1value1 é maior do que o
parâmetro value2value2. IsGreater()IsGreater() é necessário devido ao uso do mesmo
algoritmo de ordenaçãoalgoritmo de ordenação para os tipos de dados especificados.
public boolean isGreater(Object value1, Object value2) {
boolean flag = false;
if (value1 instanceof String)
flag = value1.toString().
compareToIgnoreCase(value2.toString()) > 0 ? true : false;
else if (value1 instanceof Integer)
flag = Integer.valueOf(value1.toString()) >
Integer.valueOf(value2.toString()) ? true : false;
else if (value1 instanceof Float)
flag = Float.valueOf(value1.toString()) >
Float.valueOf(value2.toString()) ? true : false;
else if (value1 instanceof Double)
flag = Double.valueOf(value1.toString()) >
Double.valueOf(value2.toString()) ? true : false;
return flag;
}
public boolean isGreater(Object value1, Object value2) {
boolean flag = false;
if (value1 instanceof String)
flag = value1.toString().
compareToIgnoreCase(value2.toString()) > 0 ? true : false;
else if (value1 instanceof Integer)
flag = Integer.valueOf(value1.toString()) >
Integer.valueOf(value2.toString()) ? true : false;
else if (value1 instanceof Float)
flag = Float.valueOf(value1.toString()) >
Float.valueOf(value2.toString()) ? true : false;
else if (value1 instanceof Double)
flag = Double.valueOf(value1.toString()) >
Double.valueOf(value2.toString()) ? true : false;
return flag;
}
InstanceofInstanceof verifica
a classe do objeto
41. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 4141//6464
O MétodoO Método print()print()
● Outro método importante é a exibição dos elementos a serem
ordenados ou dos elementos ordenados. Para isso, o método
print()print() foi implementado:
public void print() {
int i;
for (i = 0; i < array.length; i++)
System.out.print(array[i] + " ");
System.out.println();
}
public void print() {
int i;
for (i = 0; i < array.length; i++)
System.out.print(array[i] + " ");
System.out.println();
}
Atenção!Atenção!
arrayarray é um atributo privado da classe que detêm os métodos de ordenação,é um atributo privado da classe que detêm os métodos de ordenação,
swap()swap(),, print()print() ee isGreater()isGreater(). Assim, se exibido os elementos antes da. Assim, se exibido os elementos antes da
chamada do método de ordenação, então os elementos estarão desordenados.chamada do método de ordenação, então os elementos estarão desordenados.
Atenção!Atenção!
arrayarray é um atributo privado da classe que detêm os métodos de ordenação,é um atributo privado da classe que detêm os métodos de ordenação,
swap()swap(),, print()print() ee isGreater()isGreater(). Assim, se exibido os elementos antes da. Assim, se exibido os elementos antes da
chamada do método de ordenação, então os elementos estarão desordenados.chamada do método de ordenação, então os elementos estarão desordenados.
http://www.ime.usp.br/~pf/algoritmos/aulas/ordena.html#insertion
42. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 4242//6464
3.3. MétodoMétodo Insertion SortInsertion Sort
Percorrer a sequência de elementossequência de elementos (N-1)(N-1) vezes, de 1 a N,
deslocando o elemento correspondente a iteração ii de modo que
os elementos à esquerdaelementos à esquerda fiquem ordenados (elementos menoreselementos menores
para o iníciopara o início).
– A cada iteração o método compara o elemento com os seus
predecessores (array[i] com array[i-1], array[i-2]…
array[0]) e o insere na posição adequada.
Atenção!Atenção!
Uma sequência comUma sequência com NN elementos terá, após a 1ª iteração, um elementoelementos terá, após a 1ª iteração, um elemento
ordenado eordenado e N-1N-1 elementos para ordenar. Na 2ª iteração dois elementoselementos para ordenar. Na 2ª iteração dois elementos
ordenados eordenados e N-2N-2 para ordenar. Assim, sucessivamente, até a iteraçãopara ordenar. Assim, sucessivamente, até a iteração N-1N-1, cujo, cujo
número de elementos para ordenar énúmero de elementos para ordenar é N-(N-1)N-(N-1)
Atenção!Atenção!
Uma sequência comUma sequência com NN elementos terá, após a 1ª iteração, um elementoelementos terá, após a 1ª iteração, um elemento
ordenado eordenado e N-1N-1 elementos para ordenar. Na 2ª iteração dois elementoselementos para ordenar. Na 2ª iteração dois elementos
ordenados eordenados e N-2N-2 para ordenar. Assim, sucessivamente, até a iteraçãopara ordenar. Assim, sucessivamente, até a iteração N-1N-1, cujo, cujo
número de elementos para ordenar énúmero de elementos para ordenar é N-(N-1)N-(N-1)
44. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 4444//6464
MétodoMétodo insertionSort()insertionSort() em Javaem Java
1. public void insertionSort() {
2. int i, j;
3. Object key;
4.
5. for (i = 1; i < array.length; i++) {
6. key = array[i];
7. j = i - 1;
8. while ((j >= 0) && (!isGreater(key, array[j]))) {
9. array[j+1] = array[j];
10. j--;
11. }
12. array[j+1] = key;
13. }
14. }
1. public void insertionSort() {
2. int i, j;
3. Object key;
4.
5. for (i = 1; i < array.length; i++) {
6. key = array[i];
7. j = i - 1;
8. while ((j >= 0) && (!isGreater(key, array[j]))) {
9. array[j+1] = array[j];
10. j--;
11. }
12. array[j+1] = key;
13. }
14. }
Atenção!Atenção!
Simule o método emSimule o método em http://www.cs.usfca.edu/~galles/visualization/ComparisonSort.htmlhttp://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html
Atenção!Atenção!
Simule o método emSimule o método em http://www.cs.usfca.edu/~galles/visualization/ComparisonSort.htmlhttp://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html
45. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 4545//6464
4.4. MétodoMétodo Bubble SortBubble Sort
Percorrer a sequência de elementossequência de elementos (N-1)(N-1) vezes, de 0 a (N-1),
comparando e trocando o elemento correspondente a iteração ii
com os elementos à direitaelementos à direita (elementos menores para o inícioelementos menores para o início).
– A cada iteração o método compara o elemento com seus
sucessores (array[i] com array[i+1]) e o insere na posição
adequada.
Atenção!Atenção!
Uma sequência comUma sequência com NN elementos terá, após a 1ª iteração, um elementoelementos terá, após a 1ª iteração, um elemento
ordenado eordenado e N-1N-1 elementos para ordenar. Na 2ª iteração dois elementoselementos para ordenar. Na 2ª iteração dois elementos
ordenados eordenados e N-2N-2 para ordenar. Assim, sucessivamente, até a iteraçãopara ordenar. Assim, sucessivamente, até a iteração N-1N-1, cujo, cujo
número de elementos para ordenar énúmero de elementos para ordenar é N-(N-1)N-(N-1)
Atenção!Atenção!
Uma sequência comUma sequência com NN elementos terá, após a 1ª iteração, um elementoelementos terá, após a 1ª iteração, um elemento
ordenado eordenado e N-1N-1 elementos para ordenar. Na 2ª iteração dois elementoselementos para ordenar. Na 2ª iteração dois elementos
ordenados eordenados e N-2N-2 para ordenar. Assim, sucessivamente, até a iteraçãopara ordenar. Assim, sucessivamente, até a iteração N-1N-1, cujo, cujo
número de elementos para ordenar énúmero de elementos para ordenar é N-(N-1)N-(N-1)
http://www.ime.usp.br/~pf/algoritmos/aulas/ordena.html#insertion
47. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 4747//6464
MétodoMétodo bubbleSort()bubbleSort() em Javaem Java
1. public void bubbleSort() {
2. int i, j;
3. boolean swap = true;
4.
5. for (i = array.length - 1; (i > 0 && swap); i--) {
6. swap = false;
7. for (j = 0; j < i; j++) {
8. if (isGreater(array[j], array[j+1])) {
9. swap(j,j+1);
10. swap = true;
11. }
12. }
13. }
14. }
1. public void bubbleSort() {
2. int i, j;
3. boolean swap = true;
4.
5. for (i = array.length - 1; (i > 0 && swap); i--) {
6. swap = false;
7. for (j = 0; j < i; j++) {
8. if (isGreater(array[j], array[j+1])) {
9. swap(j,j+1);
10. swap = true;
11. }
12. }
13. }
14. }
A variável swapswap interromper o
processo quando houver uma
passagem inteira sem trocas
Função swap()swap() apresentada
para trocar a posição dos
valores dos índices.
Atenção!Atenção!
Simule o método emSimule o método em http://www.cs.usfca.edu/~galles/visualization/ComparisonSort.htmlhttp://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html
Atenção!Atenção!
Simule o método emSimule o método em http://www.cs.usfca.edu/~galles/visualization/ComparisonSort.htmlhttp://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html
48. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 4848//6464
5. Método5. Método Selection SortSelection Sort
Percorrer a sequência de elementossequência de elementos (N-1)(N-1) vezes, de 0 a N-1,
encontrando a cada iteração ii, sendo ii entre 0…(N-1)0…(N-1), o menor
elemento. Em seguida, trocar o menor elemento pelo elemento do
índice ii (elementos menores para o inícioelementos menores para o início).
– A cada iteração, encontrar o menor valor e trocá-lo pela posição do
índice (minmin com array[i]array[i]).
Atenção!Atenção!
Uma sequência comUma sequência com NN elementos terá, após a 1ª iteração, um elementoelementos terá, após a 1ª iteração, um elemento
ordenado eordenado e N-1N-1 elementos para ordenar. Na 2ª iteração dois elementoselementos para ordenar. Na 2ª iteração dois elementos
ordenados eordenados e N-2N-2 para ordenar. Assim, sucessivamente, até a iteraçãopara ordenar. Assim, sucessivamente, até a iteração N-1N-1, cujo, cujo
número de elementos para ordenar énúmero de elementos para ordenar é N-(N-1)N-(N-1)
Atenção!Atenção!
Uma sequência comUma sequência com NN elementos terá, após a 1ª iteração, um elementoelementos terá, após a 1ª iteração, um elemento
ordenado eordenado e N-1N-1 elementos para ordenar. Na 2ª iteração dois elementoselementos para ordenar. Na 2ª iteração dois elementos
ordenados eordenados e N-2N-2 para ordenar. Assim, sucessivamente, até a iteraçãopara ordenar. Assim, sucessivamente, até a iteração N-1N-1, cujo, cujo
número de elementos para ordenar énúmero de elementos para ordenar é N-(N-1)N-(N-1)
50. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 5050//6464
MétodoMétodo selectionSort()selectionSort() em Javaem Java
1. public void selectionSort() {
2. int i, j, min;
3.
4. for (i = 0; i < array.length - 1; i++) {
5. min = i;
6. for (j = i + 1; j < array.length; j++)
7. if (!isGreater(array[j], array[min]))
8. min = j;
9. swap(min,i);
10. }
11. }
1. public void selectionSort() {
2. int i, j, min;
3.
4. for (i = 0; i < array.length - 1; i++) {
5. min = i;
6. for (j = i + 1; j < array.length; j++)
7. if (!isGreater(array[j], array[min]))
8. min = j;
9. swap(min,i);
10. }
11. }
Atenção!Atenção!
Simule o método emSimule o método em http://www.cs.usfca.edu/~galles/visualization/ComparisonSort.htmlhttp://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html
Atenção!Atenção!
Simule o método emSimule o método em http://www.cs.usfca.edu/~galles/visualization/ComparisonSort.htmlhttp://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html
51. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 5151//6464
6. Simuladores6. Simuladores
● http://www.cs.usfca.edu/~galles/visualization/
● http://www.sorting-algorithms.com/
● http://nicholasandre.com.br/sorting/
Atenção!Atenção!
Analise a execução dos métodos apresentados para as diferentesAnalise a execução dos métodos apresentados para as diferentes
entradas (entradas (Random,, Nearly Sorted,, Reversed ee Few Unique))
Atenção!Atenção!
Analise a execução dos métodos apresentados para as diferentesAnalise a execução dos métodos apresentados para as diferentes
entradas (entradas (Random,, Nearly Sorted,, Reversed ee Few Unique))
52. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 5252//6464
CréditosCréditos
●
MaterialMaterial
– Preiss, B. R. Estrutura de Dados e Algoritmos: Padrões de Projetos
Orientados a Objeto com Java. Rio de Janeiro: Elsevier, 2000. ISBN 978-
85-7110-0693-7.
Capítulo 15: Algoritmos de Ordenação e Ordenadores
– Aulas preparadas e disponibilizadas em 2014-1 pelo professor Lucas
Antiqueira (TSI32B 2014-2).
53. TSI33A – Banco de Dados 1TSI33A – Banco de Dados 1
Ordenação Interna – Parte IIOrdenação Interna – Parte II
Prof. Me. Sidgley Camargo de Andrade
Semana 03
54. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 5454//6464
1.1. MétodoMétodo Merge SortMerge Sort
A sequência de elementossequência de elementos é dividida recursivamente NN vezes até
cada subsequênciasubsequência conter apenas um elemento. As subsenquênciassubsenquências
são intercaladas formando uma sequência ordenadasequência ordenada de elementos
(dividir para conquistardividir para conquistar).
dividirdividir
56. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 5656//6464
O MétodoO Método isGreaterEquals()isGreaterEquals()
● Esse método identifica se o parâmetro value1value1 é maior ou igual do que o
parâmetro value2value2.
public boolean isGreaterEquals(Object value1, Object value2) {
boolean flag = false;
if (value1 instanceof String)
flag = value1.toString().
compareToIgnoreCase(value2.toString()) >= 0 ? true : false;
else if (value1 instanceof Integer)
flag = Integer.valueOf(value1.toString()) >=
Integer.valueOf(value2.toString()) ? true : false;
else if (value1 instanceof Float)
flag = Float.valueOf(value1.toString()) >=
Float.valueOf(value2.toString()) ? true : false;
else if (value1 instanceof Double)
flag = Double.valueOf(value1.toString()) >=
Double.valueOf(value2.toString()) ? true : false;
return flag;
}
public boolean isGreaterEquals(Object value1, Object value2) {
boolean flag = false;
if (value1 instanceof String)
flag = value1.toString().
compareToIgnoreCase(value2.toString()) >= 0 ? true : false;
else if (value1 instanceof Integer)
flag = Integer.valueOf(value1.toString()) >=
Integer.valueOf(value2.toString()) ? true : false;
else if (value1 instanceof Float)
flag = Float.valueOf(value1.toString()) >=
Float.valueOf(value2.toString()) ? true : false;
else if (value1 instanceof Double)
flag = Double.valueOf(value1.toString()) >=
Double.valueOf(value2.toString()) ? true : false;
return flag;
}
57. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 5757//6464
MétodoMétodo mergeSort()mergeSort() em Java -em Java - DivisãoDivisão
1. public void mergeSort() {
2. mergeSortRecursive(0, array.length);
3. }
1. public void mergeSort() {
2. mergeSortRecursive(0, array.length);
3. }
1. private void mergeSortRecursive(int p, int r) {
2. int q;
3. if (p < r - 1) {
4. q = (p + r) / 2;
5. mergeSortRecursive(p, q);
6. mergeSortRecursive(q, r);
7. doMerge(p, q, r);
8. }
9. }
1. private void mergeSortRecursive(int p, int r) {
2. int q;
3. if (p < r - 1) {
4. q = (p + r) / 2;
5. mergeSortRecursive(p, q);
6. mergeSortRecursive(q, r);
7. doMerge(p, q, r);
8. }
9. }
Método público a ser invocado.
Método para realizar as divisões
recursivas e invocar a intercalação
das subcadeias de elementos.
58. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 5858//6464
MétodoMétodo mergeSort()mergeSort() em Java -em Java - IntercalaçãoIntercalação
1. private void doMerge(int p, int q, int r) {
2. int i = p, j = q, k = 0;
3. Object[] w = new Object[r-p];
4.
5. while (i < q && j < r) {
6. if (!isGreaterEquals(array[i],array[j]))
7. w[k++] = array[i++];
8. else
9. w[k++] = array[j++];
10. }
11.
12. while (i < q)
13. w[k++] = array[i++];
14.
15. while (j < r)
16. w[k++] = array[j++];
17.
18. for (i = p; i < r; ++i)
19. array[i] = w[i-p];
20. }
1. private void doMerge(int p, int q, int r) {
2. int i = p, j = q, k = 0;
3. Object[] w = new Object[r-p];
4.
5. while (i < q && j < r) {
6. if (!isGreaterEquals(array[i],array[j]))
7. w[k++] = array[i++];
8. else
9. w[k++] = array[j++];
10. }
11.
12. while (i < q)
13. w[k++] = array[i++];
14.
15. while (j < r)
16. w[k++] = array[j++];
17.
18. for (i = p; i < r; ++i)
19. array[i] = w[i-p];
20. }
Atenção!Atenção!
Simule o método emSimule o método em http://www.cs.usfca.edu/~galles/visualization/ComparisonSort.htmlhttp://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html
Atenção!Atenção!
Simule o método emSimule o método em http://www.cs.usfca.edu/~galles/visualization/ComparisonSort.htmlhttp://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html
59. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 5959//6464
1.1. MétodoMétodo Quick SortQuick Sort
A sequência de elementossequência de elementos é dividida recursivamente NN vezes através
do particionamento dos elementos em duas subsequências
desordenadas de modo que os elementos menores que um
determinado pivo fiquem para a esquerda e os elementos maiores à
direita. Depois da partição o pivo é inserido entre as duas
sequências (dividir para conquistardividir para conquistar).
60. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 6060//6464
MétodoMétodo quickSort()quickSort() em Javaem Java
1. public void quickSort() {
2. quickSortRecursive(0, array.length - 1);
3. }
1. public void quickSort() {
2. quickSortRecursive(0, array.length - 1);
3. }
Método público a ser invocado.
61. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 6161//6464
MétodoMétodo quickSort()quickSort() em Javaem Java
1. private void quickSortRecursive(int inf, int sup) {
2. int meio, i, j;
3. Object aux, pivo;
4. if (inf < sup) {
5. meio = (inf + sup) / 2;
6. pivo = array[meio];
7. array[meio] = array[sup];
8. array[sup] = pivo;
9. i = inf - 1;
10. j = sup;
11. do {
12. do {
13. i++;
14. } while (isGreater(pivo, array[i]));
15. do {
16. j--;
17. } while ((isGreater(array[j], pivo)) && (j > inf));
18. if (i < j) {
19. aux = array[i];
20. array[i] = array[j];
21. array[j] = aux;
22. }
23. } while (i < j);
24. array[sup] = array[i];
25. array[i] = pivo;
26. quickSortRecursive(inf, i - 1);
27. quickSortRecursive(i + 1, sup);
28. }
39. }
1. private void quickSortRecursive(int inf, int sup) {
2. int meio, i, j;
3. Object aux, pivo;
4. if (inf < sup) {
5. meio = (inf + sup) / 2;
6. pivo = array[meio];
7. array[meio] = array[sup];
8. array[sup] = pivo;
9. i = inf - 1;
10. j = sup;
11. do {
12. do {
13. i++;
14. } while (isGreater(pivo, array[i]));
15. do {
16. j--;
17. } while ((isGreater(array[j], pivo)) && (j > inf));
18. if (i < j) {
19. aux = array[i];
20. array[i] = array[j];
21. array[j] = aux;
22. }
23. } while (i < j);
24. array[sup] = array[i];
25. array[i] = pivo;
26. quickSortRecursive(inf, i - 1);
27. quickSortRecursive(i + 1, sup);
28. }
39. }
62. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 6262//6464
ConsideraçõesConsiderações quickSort()quickSort()
● A seleção do pivotpivot afeta diretamente o tempo de processamento do
algoritmo, portanto, cuidado com a escolha do pivotpivot.
63. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 6363//6464
6. Simuladores6. Simuladores
● http://www.cs.usfca.edu/~galles/visualization/
● http://www.sorting-algorithms.com/
● http://nicholasandre.com.br/sorting/
Atenção!Atenção!
Analise a execução dos métodos apresentados para as diferentesAnalise a execução dos métodos apresentados para as diferentes
entradas (entradas (Random,, Nearly Sorted,, Reversed ee Few Unique))
Atenção!Atenção!
Analise a execução dos métodos apresentados para as diferentesAnalise a execução dos métodos apresentados para as diferentes
entradas (entradas (Random,, Nearly Sorted,, Reversed ee Few Unique))
64. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 6464//6464
CréditosCréditos
●
MaterialMaterial
– Preiss, B. R. Estrutura de Dados e Algoritmos: Padrões de Projetos
Orientados a Objeto com Java. Rio de Janeiro: Elsevier, 2000. ISBN 978-
85-7110-0693-7.
Capítulo 15: Algoritmos de Ordenação e Ordenadores