SlideShare una empresa de Scribd logo
1 de 64
Descargar para leer sin conexión
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
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
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
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);
}
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.
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
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
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
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
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.
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
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
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
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);
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.
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)))??
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);
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();
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
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
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
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
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
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
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
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..
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() );
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
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
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
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
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).
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
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.
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?
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…
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.
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)
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.
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
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
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)
TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 4343//6464
ExemplificaçãoExemplificação Insertion SortInsertion Sort
// 1ª iteração 0 até 0
i=1 3 0 5 2 1 4 key=0 <[0] swap() true
_ 3 5 2 1 4
0 3 5 2 1 4
// 2ª iteração 1 até 0
i=2 0 3 5 2 1 4 key=5 <[1], <[0] swap() false
0 3 5 2 1 4
// 3ª iteração 2 até 0
i=3 0 3 5 2 1 4 key=2 <[2], <[1], <[0] swap() true
0 3 _ 5 1 4
0 _ 3 5 1 4
0 2 3 5 1 4
// 4ª iteração 3 até 0
i=4 0 2 3 5 1 4 key=2 <[3], <[2], <[1], <[0] swap() true
0 2 3 _ 5 4
0 2 _ 3 5 4
0 _ 2 3 5 4
0 1 2 3 5 4
// 5ª iteração 4 até 0
i=5 0 1 2 3 5 4 key=2 <[4], <[3], <[2], <[1], <[0] swap() true
0 1 2 3 _ 5
0 1 2 3 4 5
// 1ª iteração 0 até 0
i=1 3 0 5 2 1 4 key=0 <[0] swap() true
_ 3 5 2 1 4
0 3 5 2 1 4
// 2ª iteração 1 até 0
i=2 0 3 5 2 1 4 key=5 <[1], <[0] swap() false
0 3 5 2 1 4
// 3ª iteração 2 até 0
i=3 0 3 5 2 1 4 key=2 <[2], <[1], <[0] swap() true
0 3 _ 5 1 4
0 _ 3 5 1 4
0 2 3 5 1 4
// 4ª iteração 3 até 0
i=4 0 2 3 5 1 4 key=2 <[3], <[2], <[1], <[0] swap() true
0 2 3 _ 5 4
0 2 _ 3 5 4
0 _ 2 3 5 4
0 1 2 3 5 4
// 5ª iteração 4 até 0
i=5 0 1 2 3 5 4 key=2 <[4], <[3], <[2], <[1], <[0] swap() true
0 1 2 3 _ 5
0 1 2 3 4 5
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
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
TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 4646//6464
ExemplificaçãoExemplificação Bubble SortBubble Sort
// 1ª iteração 0 até N-1
i=5 3 0 5 2 1 4 array[0] – array[1] swap() true
0 3 5 2 1 4 array[1] – array[2] swap() false
0 3 5 2 1 4 array[2] – array[3] swap() true
0 3 2 5 1 4 array[3] – array[4] swap() true
0 3 2 1 5 4 array[4] – array[5] swap() true
0 3 2 1 4 5 // término da 1ª iteração
// 2ª iteração 0 até N-2
i=4 0 3 2 1 4 5 array[0] – array[1] swap() false
0 3 2 1 4 5 array[1] – array[2] swap() true
0 2 3 1 4 5 array[2] – array[3] swap() true
0 2 1 3 4 5 array[3] – array[4] swap() false
0 2 1 3 4 5 // término da 2ª iteração
// 3ª iteração 0 até N-3
i=3 0 2 1 3 4 5 array[0] – array[1] swap() false
0 2 1 3 4 5 array[1] – array[2] swap() true
0 1 2 3 4 5 array[2] – array[3] swap() false
0 1 2 3 4 5 // término da 3ª iteração
// 4ª iteração 0 até N-4
i=2 0 1 2 3 4 5 array[0] – array[1] swap() false
0 1 2 3 4 5 array[1] – array[2] swap() false
0 1 2 3 4 5 // término da 4ª iteração
// 5ª iteração 0 até N-5 (interrompida pela variável swap – sem troca em i=2)
i=1 0 1 2 3 4 5 array[0] – array[1] swap() false
0 1 2 3 4 5 // término da 5ª iteração
// 1ª iteração 0 até N-1
i=5 3 0 5 2 1 4 array[0] – array[1] swap() true
0 3 5 2 1 4 array[1] – array[2] swap() false
0 3 5 2 1 4 array[2] – array[3] swap() true
0 3 2 5 1 4 array[3] – array[4] swap() true
0 3 2 1 5 4 array[4] – array[5] swap() true
0 3 2 1 4 5 // término da 1ª iteração
// 2ª iteração 0 até N-2
i=4 0 3 2 1 4 5 array[0] – array[1] swap() false
0 3 2 1 4 5 array[1] – array[2] swap() true
0 2 3 1 4 5 array[2] – array[3] swap() true
0 2 1 3 4 5 array[3] – array[4] swap() false
0 2 1 3 4 5 // término da 2ª iteração
// 3ª iteração 0 até N-3
i=3 0 2 1 3 4 5 array[0] – array[1] swap() false
0 2 1 3 4 5 array[1] – array[2] swap() true
0 1 2 3 4 5 array[2] – array[3] swap() false
0 1 2 3 4 5 // término da 3ª iteração
// 4ª iteração 0 até N-4
i=2 0 1 2 3 4 5 array[0] – array[1] swap() false
0 1 2 3 4 5 array[1] – array[2] swap() false
0 1 2 3 4 5 // término da 4ª iteração
// 5ª iteração 0 até N-5 (interrompida pela variável swap – sem troca em i=2)
i=1 0 1 2 3 4 5 array[0] – array[1] swap() false
0 1 2 3 4 5 // término da 5ª iteração
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
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)
TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 4949//6464
ExemplificaçãoExemplificação Seletion SortSeletion Sort
// 1ª iteração
3 0 5 2 1 4 min=[0] troca com [1] swap() true
0 3 5 2 1 4
// 2ª iteração
0 3 5 2 1 4 min=[1] troca com [4] swap() true
0 1 5 2 3 4
// 3ª iteração
0 1 5 2 3 4 min=[2] troca com [3] swap() true
0 1 2 5 3 4
// 4ª iteração
0 1 2 5 3 4 min=[3] troca com [4] swap() true
0 1 2 3 5 4
// 5ª iteração
0 1 2 3 5 4 min=[4] troca com [5] swap() true
0 1 2 3 5 4
// 1ª iteração
3 0 5 2 1 4 min=[0] troca com [1] swap() true
0 3 5 2 1 4
// 2ª iteração
0 3 5 2 1 4 min=[1] troca com [4] swap() true
0 1 5 2 3 4
// 3ª iteração
0 1 5 2 3 4 min=[2] troca com [3] swap() true
0 1 2 5 3 4
// 4ª iteração
0 1 2 5 3 4 min=[3] troca com [4] swap() true
0 1 2 3 5 4
// 5ª iteração
0 1 2 3 5 4 min=[4] troca com [5] swap() true
0 1 2 3 5 4
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
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))
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).
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
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
TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 5555//6464
ExemplificaçãoExemplificação Merge SortMerge Sort
3 0 5 2 1 4
3 0 5 2 1 4
3 0 5 2 1 4
3 0 5 2 1 4
0 3 5 2 1 4
0 3 5 2 1 4
0 3 5 1 2 4
0 1 2 3 4 5
3 0 5 2 1 4
3 0 5 2 1 4
3 0 5 2 1 4
3 0 5 2 1 4
0 3 5 2 1 4
0 3 5 2 1 4
0 3 5 1 2 4
0 1 2 3 4 5
DividirDividir
mergeSortRecursive()
IntercalarIntercalar
doMerge()
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;
}
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.
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
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).
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.
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. }
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.
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))
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

Más contenido relacionado

Similar a Aulas TSI32B - Estrutura, Pesquisa e Ordenação de Dados (TSI UTFPR-Toledo)

Classe integer-float-byte-short-long-double
Classe integer-float-byte-short-long-doubleClasse integer-float-byte-short-long-double
Classe integer-float-byte-short-long-double
PAULO Moreira
 
As Novidades Do C# 4.0 - NetPonto
As Novidades Do C# 4.0 - NetPontoAs Novidades Do C# 4.0 - NetPonto
As Novidades Do C# 4.0 - NetPonto
Paulo Morgado
 

Similar a Aulas TSI32B - Estrutura, Pesquisa e Ordenação de Dados (TSI UTFPR-Toledo) (20)

Programação Estruturada 2 - Aula 03
Programação Estruturada 2 - Aula 03Programação Estruturada 2 - Aula 03
Programação Estruturada 2 - Aula 03
 
Cheat sheet - String Java (Referência rápida)
Cheat sheet - String Java (Referência rápida)Cheat sheet - String Java (Referência rápida)
Cheat sheet - String Java (Referência rápida)
 
Linguagem C - Estruturas
Linguagem C - EstruturasLinguagem C - Estruturas
Linguagem C - Estruturas
 
Classe integer-float-byte-short-long-double
Classe integer-float-byte-short-long-doubleClasse integer-float-byte-short-long-double
Classe integer-float-byte-short-long-double
 
Java Desktop
Java DesktopJava Desktop
Java Desktop
 
05 classes utilitarias
05   classes utilitarias05   classes utilitarias
05 classes utilitarias
 
String e IO
String e IOString e IO
String e IO
 
As Novidades Do C# 4.0 - NetPonto
As Novidades Do C# 4.0 - NetPontoAs Novidades Do C# 4.0 - NetPonto
As Novidades Do C# 4.0 - NetPonto
 
String
StringString
String
 
Java4
Java4Java4
Java4
 
String
StringString
String
 
Apostila Algoritmos e Estrutura de Dados (AEDS)
Apostila Algoritmos e Estrutura de Dados (AEDS)Apostila Algoritmos e Estrutura de Dados (AEDS)
Apostila Algoritmos e Estrutura de Dados (AEDS)
 
Algoritmo e Estrutura de dados em C - Aula 01 - 2019
Algoritmo e Estrutura de dados em C - Aula 01 - 2019Algoritmo e Estrutura de dados em C - Aula 01 - 2019
Algoritmo e Estrutura de dados em C - Aula 01 - 2019
 
Linguagem R
Linguagem RLinguagem R
Linguagem R
 
Java8
Java8Java8
Java8
 
Linguagem C - Strings
Linguagem C - StringsLinguagem C - Strings
Linguagem C - Strings
 
Passagem de Objetos entre Java e Oracle
Passagem de Objetos entre Java e OraclePassagem de Objetos entre Java e Oracle
Passagem de Objetos entre Java e Oracle
 
programação c 10 aula
programação c 10 aulaprogramação c 10 aula
programação c 10 aula
 
Conhecendo ou relembrando C
Conhecendo ou relembrando CConhecendo ou relembrando C
Conhecendo ou relembrando C
 
pSets TSI32B - Estrutura, Pesquisa e Ordenação de Dados (TSI UTFPR-Toledo)
pSets TSI32B - Estrutura, Pesquisa e Ordenação de Dados (TSI UTFPR-Toledo)pSets TSI32B - Estrutura, Pesquisa e Ordenação de Dados (TSI UTFPR-Toledo)
pSets TSI32B - Estrutura, Pesquisa e Ordenação de Dados (TSI UTFPR-Toledo)
 

Más de Federal University of Technology - Paraná/Brazil (UTFPR)

Mining rainfall spatio-temporal patterns in Twitter: a temporal approach
Mining rainfall spatio-temporal patterns in Twitter: a temporal approachMining rainfall spatio-temporal patterns in Twitter: a temporal approach
Mining rainfall spatio-temporal patterns in Twitter: a temporal approach
Federal University of Technology - Paraná/Brazil (UTFPR)
 

Más de Federal University of Technology - Paraná/Brazil (UTFPR) (7)

Situational awareness in social media: lessons learned using information entr...
Situational awareness in social media: lessons learned using information entr...Situational awareness in social media: lessons learned using information entr...
Situational awareness in social media: lessons learned using information entr...
 
Does keyword noise change over space and time? A case study of flood- and rai...
Does keyword noise change over space and time? A case study of flood- and rai...Does keyword noise change over space and time? A case study of flood- and rai...
Does keyword noise change over space and time? A case study of flood- and rai...
 
Mining rainfall spatio-temporal patterns in Twitter: a temporal approach
Mining rainfall spatio-temporal patterns in Twitter: a temporal approachMining rainfall spatio-temporal patterns in Twitter: a temporal approach
Mining rainfall spatio-temporal patterns in Twitter: a temporal approach
 
An Introduction to Metric Learning for Clustering
An Introduction to Metric Learning for ClusteringAn Introduction to Metric Learning for Clustering
An Introduction to Metric Learning for Clustering
 
An introduction to automated analysis of feature models through propositional...
An introduction to automated analysis of feature models through propositional...An introduction to automated analysis of feature models through propositional...
An introduction to automated analysis of feature models through propositional...
 
pSets TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
pSets TSI33A - Banco de Dados I (TSI UTFPR-Toledo)pSets TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
pSets TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
 
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
 

Último

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
Natalia Granato
 

Último (6)

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 

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)
  • 43. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 4343//6464 ExemplificaçãoExemplificação Insertion SortInsertion Sort // 1ª iteração 0 até 0 i=1 3 0 5 2 1 4 key=0 <[0] swap() true _ 3 5 2 1 4 0 3 5 2 1 4 // 2ª iteração 1 até 0 i=2 0 3 5 2 1 4 key=5 <[1], <[0] swap() false 0 3 5 2 1 4 // 3ª iteração 2 até 0 i=3 0 3 5 2 1 4 key=2 <[2], <[1], <[0] swap() true 0 3 _ 5 1 4 0 _ 3 5 1 4 0 2 3 5 1 4 // 4ª iteração 3 até 0 i=4 0 2 3 5 1 4 key=2 <[3], <[2], <[1], <[0] swap() true 0 2 3 _ 5 4 0 2 _ 3 5 4 0 _ 2 3 5 4 0 1 2 3 5 4 // 5ª iteração 4 até 0 i=5 0 1 2 3 5 4 key=2 <[4], <[3], <[2], <[1], <[0] swap() true 0 1 2 3 _ 5 0 1 2 3 4 5 // 1ª iteração 0 até 0 i=1 3 0 5 2 1 4 key=0 <[0] swap() true _ 3 5 2 1 4 0 3 5 2 1 4 // 2ª iteração 1 até 0 i=2 0 3 5 2 1 4 key=5 <[1], <[0] swap() false 0 3 5 2 1 4 // 3ª iteração 2 até 0 i=3 0 3 5 2 1 4 key=2 <[2], <[1], <[0] swap() true 0 3 _ 5 1 4 0 _ 3 5 1 4 0 2 3 5 1 4 // 4ª iteração 3 até 0 i=4 0 2 3 5 1 4 key=2 <[3], <[2], <[1], <[0] swap() true 0 2 3 _ 5 4 0 2 _ 3 5 4 0 _ 2 3 5 4 0 1 2 3 5 4 // 5ª iteração 4 até 0 i=5 0 1 2 3 5 4 key=2 <[4], <[3], <[2], <[1], <[0] swap() true 0 1 2 3 _ 5 0 1 2 3 4 5
  • 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
  • 46. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 4646//6464 ExemplificaçãoExemplificação Bubble SortBubble Sort // 1ª iteração 0 até N-1 i=5 3 0 5 2 1 4 array[0] – array[1] swap() true 0 3 5 2 1 4 array[1] – array[2] swap() false 0 3 5 2 1 4 array[2] – array[3] swap() true 0 3 2 5 1 4 array[3] – array[4] swap() true 0 3 2 1 5 4 array[4] – array[5] swap() true 0 3 2 1 4 5 // término da 1ª iteração // 2ª iteração 0 até N-2 i=4 0 3 2 1 4 5 array[0] – array[1] swap() false 0 3 2 1 4 5 array[1] – array[2] swap() true 0 2 3 1 4 5 array[2] – array[3] swap() true 0 2 1 3 4 5 array[3] – array[4] swap() false 0 2 1 3 4 5 // término da 2ª iteração // 3ª iteração 0 até N-3 i=3 0 2 1 3 4 5 array[0] – array[1] swap() false 0 2 1 3 4 5 array[1] – array[2] swap() true 0 1 2 3 4 5 array[2] – array[3] swap() false 0 1 2 3 4 5 // término da 3ª iteração // 4ª iteração 0 até N-4 i=2 0 1 2 3 4 5 array[0] – array[1] swap() false 0 1 2 3 4 5 array[1] – array[2] swap() false 0 1 2 3 4 5 // término da 4ª iteração // 5ª iteração 0 até N-5 (interrompida pela variável swap – sem troca em i=2) i=1 0 1 2 3 4 5 array[0] – array[1] swap() false 0 1 2 3 4 5 // término da 5ª iteração // 1ª iteração 0 até N-1 i=5 3 0 5 2 1 4 array[0] – array[1] swap() true 0 3 5 2 1 4 array[1] – array[2] swap() false 0 3 5 2 1 4 array[2] – array[3] swap() true 0 3 2 5 1 4 array[3] – array[4] swap() true 0 3 2 1 5 4 array[4] – array[5] swap() true 0 3 2 1 4 5 // término da 1ª iteração // 2ª iteração 0 até N-2 i=4 0 3 2 1 4 5 array[0] – array[1] swap() false 0 3 2 1 4 5 array[1] – array[2] swap() true 0 2 3 1 4 5 array[2] – array[3] swap() true 0 2 1 3 4 5 array[3] – array[4] swap() false 0 2 1 3 4 5 // término da 2ª iteração // 3ª iteração 0 até N-3 i=3 0 2 1 3 4 5 array[0] – array[1] swap() false 0 2 1 3 4 5 array[1] – array[2] swap() true 0 1 2 3 4 5 array[2] – array[3] swap() false 0 1 2 3 4 5 // término da 3ª iteração // 4ª iteração 0 até N-4 i=2 0 1 2 3 4 5 array[0] – array[1] swap() false 0 1 2 3 4 5 array[1] – array[2] swap() false 0 1 2 3 4 5 // término da 4ª iteração // 5ª iteração 0 até N-5 (interrompida pela variável swap – sem troca em i=2) i=1 0 1 2 3 4 5 array[0] – array[1] swap() false 0 1 2 3 4 5 // término da 5ª iteração
  • 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)
  • 49. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 4949//6464 ExemplificaçãoExemplificação Seletion SortSeletion Sort // 1ª iteração 3 0 5 2 1 4 min=[0] troca com [1] swap() true 0 3 5 2 1 4 // 2ª iteração 0 3 5 2 1 4 min=[1] troca com [4] swap() true 0 1 5 2 3 4 // 3ª iteração 0 1 5 2 3 4 min=[2] troca com [3] swap() true 0 1 2 5 3 4 // 4ª iteração 0 1 2 5 3 4 min=[3] troca com [4] swap() true 0 1 2 3 5 4 // 5ª iteração 0 1 2 3 5 4 min=[4] troca com [5] swap() true 0 1 2 3 5 4 // 1ª iteração 3 0 5 2 1 4 min=[0] troca com [1] swap() true 0 3 5 2 1 4 // 2ª iteração 0 3 5 2 1 4 min=[1] troca com [4] swap() true 0 1 5 2 3 4 // 3ª iteração 0 1 5 2 3 4 min=[2] troca com [3] swap() true 0 1 2 5 3 4 // 4ª iteração 0 1 2 5 3 4 min=[3] troca com [4] swap() true 0 1 2 3 5 4 // 5ª iteração 0 1 2 3 5 4 min=[4] troca com [5] swap() true 0 1 2 3 5 4
  • 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
  • 55. TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação 5555//6464 ExemplificaçãoExemplificação Merge SortMerge Sort 3 0 5 2 1 4 3 0 5 2 1 4 3 0 5 2 1 4 3 0 5 2 1 4 0 3 5 2 1 4 0 3 5 2 1 4 0 3 5 1 2 4 0 1 2 3 4 5 3 0 5 2 1 4 3 0 5 2 1 4 3 0 5 2 1 4 3 0 5 2 1 4 0 3 5 2 1 4 0 3 5 2 1 4 0 3 5 1 2 4 0 1 2 3 4 5 DividirDividir mergeSortRecursive() IntercalarIntercalar doMerge()
  • 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