aulas tsi32b - estrutura, pesquisa e ordenação de dados (tsi utfpr-toledo)
TRANSCRIPT
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 Andradehttp://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 a Este material é uma introdução aos conceitos, técnicas e recursos fundamentais para a manipulação de cadeia de caracteres, pilhas, listas, filas, tabela hash e grafos, bem manipulaçã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 desenvolvimentoSemana 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 desenvolvimentoSemana 12Semana 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 de Dados de Dados
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 charschar[] charArray = { 'T', 'S', 'I', '3', '2', 'B' };
char ch = 'T';// Unicode for uppercase Greek omega character -> Ωchar uniChar = '\u03A9';// an array of charschar[] charArray = { 'T', 'S', 'I', '3', '2', 'B' };
short i;System.out.print("Dec \tChar\n");for(i=32;i<255;i++) {
ch = (char) i;System.out.format("%d\t%c\n",i,ch);
}
short i;System.out.print("Dec \tChar\n");for(i=32;i<255;i++) {
ch = (char) i;System.out.format("%d\t%c\n",i,ch);
}
TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação de Dados de Dados
55//6464
char como Objetos como 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 primitivo primitivo 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 classe A 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 classe A 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 de Dados de Dados
66//6464
Métodos Métodos staticstatic da Classe da 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 de Dados de Dados
77//6464
Métodos Métodos staticstatic da Classe da 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 de Dados de Dados
88//6464
Métodos Métodos staticstatic da Classe da 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 de Dados de Dados
99//6464
Métodos Métodos instanceinstance da Classe da 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ço A 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ço A 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 de Dados de Dados
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 classe A 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 dessa este não pode ser alterado. Desta forma, os métodos dessa classe retornam sempre uma nova string que contém o resultado da classe retornam sempre uma nova string que contém o resultado da operação.operação.
Atenção!Atenção!A classe A 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 dessa este não pode ser alterado. Desta forma, os métodos dessa classe retornam sempre uma nova string que contém o resultado da classe 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 de Dados de Dados
1111//6464
Criando Criando StringsStrings
● Como uma série de caracterescaracteres delimitados por aspas duplas (String String literalliteral)
● Como uma objeto (newnew + construtorconstrutor)
String disciplina = "TSI32B";System.out.println(disciplina);
String disciplina = "TSI32B";System.out.println(disciplina);
O O autoboxingautoboxing também é aplicada para também é aplicada para StringsStringsO O autoboxingautoboxing também é aplicada para també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 de Dados de Dados
1212//6464
Sequência de Sequê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("Disciplina\t\"TSI32B\"");// Disciplina "TSI32B"
System.out.println("Disciplina\t\"TSI32B\"");// Disciplina "TSI32B"
String disciplina = "Disciplina\nTSI32B";System.out.println(disciplina);// Disciplina// TSI32B
String disciplina = "Disciplina\nTSI32B";System.out.println(disciplina);// Disciplina// TSI32B
TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação de Dados de Dados
1313//6464
3. Conversão 3. 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 de Dados de Dados
1414//6464
4. Conversão número para 4. 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 de Dados de Dados
1515//6464
5. Manipulando 5. 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 de Dados de Dados
1616//6464
Coletando um Coletando 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 com Qual caracter será exibido com a execução do comando a execução do comando System.out.print(aChar)System.out.print(aChar)??
Qual caracter será exibido com a execução do comando Qual 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 de Dados de Dados
1717//6464
Coletando uma Coletando 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 de Dados de Dados
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 de Dados de Dados
1919//6464
Documentação da Classe Documentação da Classe String
Atenção!Atenção!A lista completa dos métodos está disponível no endereço A 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ço A 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 de Dados de Dados
2020//6464
Métodos Métodos instanceinstance da Classe da 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")); // falseSystem.out.println(str.equalsIgnoreCase("tsi32b")); // true
String str = new String("TSI32B");System.out.println(str.equals("tsi32b")); // falseSystem.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 de Dados de Dados
2121//6464
Métodos Métodos instanceinstance da Classe da 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")); // 1System.out.print(str.indexOf("SB")); // -1 (não encontrou)
String str = new String("TSI32B");System.out.print(str.indexOf("S")); // 1System.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 de Dados de Dados
2222//6464
Métodos Métodos instanceinstance da Classe da 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 de Dados de Dados
2323//6464
Métodos Métodos instanceinstance da Classe da 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 de Dados de Dados
2424//6464
Métodos Métodos instanceinstance da Classe da 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 de Dados de Dados
2525//6464
Segmentando o Segmentando o PathPath de um Arquivo de um Arquivofinal 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 = htmlFilename = indexPath = /home/user
TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação de Dados de Dados
2626//6464
6. A Classe 6. 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 de array de comprimento variávelcomprimento variável.
Atenção!Atenção!A classe A classe StringBuilderStringBuilder é é mutávelmutável, portanto, uma vez que é criado , portanto, uma vez que é criado um objeto um objeto StringBuilderStringBuilder este pode ser alterado. Desta forma, os este pode ser alterado. Desta forma, os métodos dessa classe não forçam a criação de uma nova métodos dessa classe não forçam a criação de uma nova StringString..
Atenção!Atenção!A classe A classe StringBuilderStringBuilder é é mutávelmutável, portanto, uma vez que é criado , portanto, uma vez que é criado um objeto um objeto StringBuilderStringBuilder este pode ser alterado. Desta forma, os este pode ser alterado. Desta forma, os métodos dessa classe não forçam a criação de uma nova mé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 de Dados de Dados
2727//6464
Criação e Capacidade de objetos Criaçã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 de Dados de Dados
2828//6464
Inserir valores de objetos Inserir 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 primitivos Mé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 de Dados de Dados
2929//6464
Remover valores de objetos Remover 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ço A 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ço A 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 de Dados de Dados
3030//6464
Trabalhando com Trabalhando com StringString e e 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 de Dados de Dados
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 de Dados de Dados
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 de Dados de Dados
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ção aplicaçã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 de Dados de Dados
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 de Dados de Dados
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ória estã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ória maior 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 de Dados de Dados
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 de Dados de Dados
3838//6464
2. Classe 2. 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 arraypublic 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 arraypublic 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 de Dados de Dados
3939//6464
O Método O 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 de Dados de Dados
4040//6464
O Método O 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 de Dados de Dados
4141//6464
O Método O 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 de Dados de Dados
4242//6464
3. 3. Método Método Insertion SortInsertion Sort
Percorrer a sequência de elementos sequê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 menores elementos 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 com Uma sequência com NN elementos terá, após a 1ª iteração, um elemento elementos terá, após a 1ª iteração, um elemento ordenado e ordenado e N-1N-1 elementos para ordenar. Na 2ª iteração dois elementos elementos para ordenar. Na 2ª iteração dois elementos ordenados e ordenados e N-2N-2 para ordenar. Assim, sucessivamente, até a iteração para 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 com Uma sequência com NN elementos terá, após a 1ª iteração, um elemento elementos terá, após a 1ª iteração, um elemento ordenado e ordenado e N-1N-1 elementos para ordenar. Na 2ª iteração dois elementos elementos para ordenar. Na 2ª iteração dois elementos ordenados e ordenados e N-2N-2 para ordenar. Assim, sucessivamente, até a iteração para 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 de Dados de Dados
4343//6464
Exemplificação Exemplificação Insertion SortInsertion Sort
// 1ª iteração 0 até 0i=1 3 0 5 2 1 4 key=0 <[0] swap() true
_ 3 5 2 1 40 3 5 2 1 4
// 2ª iteração 1 até 0i=2 0 3 5 2 1 4 key=5 <[1], <[0] swap() false
0 3 5 2 1 4// 3ª iteração 2 até 0i=3 0 3 5 2 1 4 key=2 <[2], <[1], <[0] swap() true
0 3 _ 5 1 40 _ 3 5 1 40 2 3 5 1 4
// 4ª iteração 3 até 0i=4 0 2 3 5 1 4 key=2 <[3], <[2], <[1], <[0] swap() true
0 2 3 _ 5 40 2 _ 3 5 40 _ 2 3 5 40 1 2 3 5 4
// 5ª iteração 4 até 0i=5 0 1 2 3 5 4 key=2 <[4], <[3], <[2], <[1], <[0] swap() true
0 1 2 3 _ 50 1 2 3 4 5
// 1ª iteração 0 até 0i=1 3 0 5 2 1 4 key=0 <[0] swap() true
_ 3 5 2 1 40 3 5 2 1 4
// 2ª iteração 1 até 0i=2 0 3 5 2 1 4 key=5 <[1], <[0] swap() false
0 3 5 2 1 4// 3ª iteração 2 até 0i=3 0 3 5 2 1 4 key=2 <[2], <[1], <[0] swap() true
0 3 _ 5 1 40 _ 3 5 1 40 2 3 5 1 4
// 4ª iteração 3 até 0i=4 0 2 3 5 1 4 key=2 <[3], <[2], <[1], <[0] swap() true
0 2 3 _ 5 40 2 _ 3 5 40 _ 2 3 5 40 1 2 3 5 4
// 5ª iteração 4 até 0i=5 0 1 2 3 5 4 key=2 <[4], <[3], <[2], <[1], <[0] swap() true
0 1 2 3 _ 50 1 2 3 4 5
TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação de Dados de Dados
4444//6464
Método Método insertionSort()insertionSort() em Java em 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 em Simule 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 em Simule 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 de Dados de Dados
4545//6464
4. 4. Método Método Bubble SortBubble Sort
Percorrer a sequência de elementos sequê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 com Uma sequência com NN elementos terá, após a 1ª iteração, um elemento elementos terá, após a 1ª iteração, um elemento ordenado e ordenado e N-1N-1 elementos para ordenar. Na 2ª iteração dois elementos elementos para ordenar. Na 2ª iteração dois elementos ordenados e ordenados e N-2N-2 para ordenar. Assim, sucessivamente, até a iteração para 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 com Uma sequência com NN elementos terá, após a 1ª iteração, um elemento elementos terá, após a 1ª iteração, um elemento ordenado e ordenado e N-1N-1 elementos para ordenar. Na 2ª iteração dois elementos elementos para ordenar. Na 2ª iteração dois elementos ordenados e ordenados e N-2N-2 para ordenar. Assim, sucessivamente, até a iteração para 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 de Dados de Dados
4646//6464
Exemplificação Exemplificação Bubble SortBubble Sort
// 1ª iteração 0 até N-1i=5 3 0 5 2 1 4 array[0] – array[1] swap() true
0 3 5 2 1 4 array[1] – array[2] swap() false0 3 5 2 1 4 array[2] – array[3] swap() true0 3 2 5 1 4 array[3] – array[4] swap() true0 3 2 1 5 4 array[4] – array[5] swap() true0 3 2 1 4 5 // término da 1ª iteração
// 2ª iteração 0 até N-2i=4 0 3 2 1 4 5 array[0] – array[1] swap() false
0 3 2 1 4 5 array[1] – array[2] swap() true0 2 3 1 4 5 array[2] – array[3] swap() true0 2 1 3 4 5 array[3] – array[4] swap() false0 2 1 3 4 5 // término da 2ª iteração
// 3ª iteração 0 até N-3i=3 0 2 1 3 4 5 array[0] – array[1] swap() false
0 2 1 3 4 5 array[1] – array[2] swap() true0 1 2 3 4 5 array[2] – array[3] swap() false0 1 2 3 4 5 // término da 3ª iteração
// 4ª iteração 0 até N-4i=2 0 1 2 3 4 5 array[0] – array[1] swap() false
0 1 2 3 4 5 array[1] – array[2] swap() false0 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-1i=5 3 0 5 2 1 4 array[0] – array[1] swap() true
0 3 5 2 1 4 array[1] – array[2] swap() false0 3 5 2 1 4 array[2] – array[3] swap() true0 3 2 5 1 4 array[3] – array[4] swap() true0 3 2 1 5 4 array[4] – array[5] swap() true0 3 2 1 4 5 // término da 1ª iteração
// 2ª iteração 0 até N-2i=4 0 3 2 1 4 5 array[0] – array[1] swap() false
0 3 2 1 4 5 array[1] – array[2] swap() true0 2 3 1 4 5 array[2] – array[3] swap() true0 2 1 3 4 5 array[3] – array[4] swap() false0 2 1 3 4 5 // término da 2ª iteração
// 3ª iteração 0 até N-3i=3 0 2 1 3 4 5 array[0] – array[1] swap() false
0 2 1 3 4 5 array[1] – array[2] swap() true0 1 2 3 4 5 array[2] – array[3] swap() false0 1 2 3 4 5 // término da 3ª iteração
// 4ª iteração 0 até N-4i=2 0 1 2 3 4 5 array[0] – array[1] swap() false
0 1 2 3 4 5 array[1] – array[2] swap() false0 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 de Dados de Dados
4747//6464
Método Método bubbleSort()bubbleSort() em Java em 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 em Simule 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 em Simule 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 de Dados de Dados
4848//6464
5. Método 5. Método Selection SortSelection Sort
Percorrer a sequência de elementos sequê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 com Uma sequência com NN elementos terá, após a 1ª iteração, um elemento elementos terá, após a 1ª iteração, um elemento ordenado e ordenado e N-1N-1 elementos para ordenar. Na 2ª iteração dois elementos elementos para ordenar. Na 2ª iteração dois elementos ordenados e ordenados e N-2N-2 para ordenar. Assim, sucessivamente, até a iteração para 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 com Uma sequência com NN elementos terá, após a 1ª iteração, um elemento elementos terá, após a 1ª iteração, um elemento ordenado e ordenado e N-1N-1 elementos para ordenar. Na 2ª iteração dois elementos elementos para ordenar. Na 2ª iteração dois elementos ordenados e ordenados e N-2N-2 para ordenar. Assim, sucessivamente, até a iteração para 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 de Dados de Dados
4949//6464
Exemplificação Exemplificaçã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() true0 1 5 2 3 4
// 3ª iteração0 1 5 2 3 4 min=[2] troca com [3] swap() true0 1 2 5 3 4
// 4ª iteração0 1 2 5 3 4 min=[3] troca com [4] swap() true0 1 2 3 5 4
// 5ª iteração0 1 2 3 5 4 min=[4] troca com [5] swap() true0 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() true0 1 5 2 3 4
// 3ª iteração0 1 5 2 3 4 min=[2] troca com [3] swap() true0 1 2 5 3 4
// 4ª iteração0 1 2 5 3 4 min=[3] troca com [4] swap() true0 1 2 3 5 4
// 5ª iteração0 1 2 3 5 4 min=[4] troca com [5] swap() true0 1 2 3 5 4
TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação de Dados de Dados
5050//6464
MétodoMétodo selectionSort() selectionSort() em Java em 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 em Simule 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 em Simule 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 de Dados de Dados
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 diferentes Analise a execução dos métodos apresentados para as diferentes entradas (entradas (Random, , Nearly Sorted, , Reversed e e Few Unique))
Atenção!Atenção!Analise a execução dos métodos apresentados para as diferentes Analise a execução dos métodos apresentados para as diferentes entradas (entradas (Random, , Nearly Sorted, , Reversed e e Few Unique))
TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação de Dados de Dados
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 de Dados de Dados
5454//6464
1. 1. Método Mé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 de Dados de Dados
5555//6464
Exemplificação Exemplificaçã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
DividirDividirmergeSortRecursive()
IntercalarIntercalardoMerge()
TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação de Dados de Dados
5656//6464
O Método O 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 de Dados de Dados
5757//6464
Método Mé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 de Dados de Dados
5858//6464
Método Mé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 em Simule 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 em Simule 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 de Dados de Dados
5959//6464
1. 1. Método Mé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 de Dados de Dados
6060//6464
Método Método quickSort()quickSort() em Java em 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 de Dados de Dados
6161//6464
Método Método quickSort()quickSort() em Java em 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 de Dados de Dados
6262//6464
Considerações Consideraçõ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 de Dados de Dados
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 diferentes Analise a execução dos métodos apresentados para as diferentes entradas (entradas (Random, , Nearly Sorted, , Reversed e e Few Unique))
Atenção!Atenção!Analise a execução dos métodos apresentados para as diferentes Analise a execução dos métodos apresentados para as diferentes entradas (entradas (Random, , Nearly Sorted, , Reversed e e Few Unique))
TSI32B - Estrutura, Pesquisa e OrdenaçãoTSI32B - Estrutura, Pesquisa e Ordenação de Dados de Dados
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