Este estudo comparou o desempenho de algoritmos de ordenação como Bubble Sort, Insertion Sort, Selection Sort, Merge Sort e Quick Sort em vetores de diferentes tamanhos e ordenações. Os resultados mostraram que Merge Sort e Quick Sort tiveram os melhores tempos de execução, enquanto Bubble Sort teve os piores tempos.
Este documento descreve e compara vários algoritmos de ordenação, incluindo seleção direta, bolha, inserção e quicksort. Fornece pseudocódigos destes algoritmos em Pascal e explica como cada um funciona através de exemplos. Além disso, discute as vantagens e desvantagens de cada método de ordenação.
15 algoritmos de busca em tabelas - sequencial e binariaRicardo Bolanho
Algoritmos de Busca em Tabelas descreve os principais algoritmos de busca em tabelas: busca sequencial, busca binária e suas variações. A busca sequencial varre toda a tabela linearmente. A busca binária requer que a tabela esteja ordenada e divide a busca em metade a cada iteração.
O documento discute algoritmos de ordenação de dados, incluindo BubbleSort, Selection Sort e Insertion Sort. Explica como cada algoritmo funciona através de exemplos passo a passo e analisa suas complexidades de tempo.
1) O documento apresenta uma introdução sobre ordenação em JQuery e AJAX, incluindo métodos de ordenação como seleção, inserção e bolha. 2) São descritos conceitos como ordenação interna, externa e local, além de análises de eficiência dos algoritmos. 3) Métodos simples como seleção, inserção e bolha são comparados a métodos eficientes como quicksort e mergesort.
O documento apresenta os conceitos básicos de listas e como modelá-las utilizando vetores em programação estruturada. Descreve listas como uma estrutura de dados que armazena elementos em uma sequência e apresenta algoritmos para adicionar, remover e acessar itens na lista.
O documento descreve os conceitos básicos de listas e como modelar listas utilizando vetores em programação estruturada. As principais ideias apresentadas são:
1) Uma lista é um conjunto de dados ordenados ou não, que podem ocupar espaços de memória contíguos ou não;
2) Listas podem ser modeladas usando vetores, necessitando de um indicador do último elemento e tratamento para quando a lista está cheia;
3) São apresentados algoritmos básicos como adicionar, remover, verificar se a lista está cheia/vazia
O documento descreve uma aula sobre vetores, matrizes, classes e métodos em Java. Ele explica como armazenar e acessar elementos em vetores e matrizes usando índices, e fornece exemplos de declaração de vetores e matrizes. Também introduz conceitos básicos sobre classes e métodos em Java, incluindo como declarar classes públicas e privadas, e como derivar novas classes de classes existentes.
1. O documento descreve o desenvolvimento de algoritmos de ordenação em C#.
2. Cinco algoritmos são implementados: bubble sort, selection sort, insertion sort, merge sort e quick sort.
3. Testes unitários foram criados para cada algoritmo para validar sua funcionalidade e desempenho.
Este documento descreve e compara vários algoritmos de ordenação, incluindo seleção direta, bolha, inserção e quicksort. Fornece pseudocódigos destes algoritmos em Pascal e explica como cada um funciona através de exemplos. Além disso, discute as vantagens e desvantagens de cada método de ordenação.
15 algoritmos de busca em tabelas - sequencial e binariaRicardo Bolanho
Algoritmos de Busca em Tabelas descreve os principais algoritmos de busca em tabelas: busca sequencial, busca binária e suas variações. A busca sequencial varre toda a tabela linearmente. A busca binária requer que a tabela esteja ordenada e divide a busca em metade a cada iteração.
O documento discute algoritmos de ordenação de dados, incluindo BubbleSort, Selection Sort e Insertion Sort. Explica como cada algoritmo funciona através de exemplos passo a passo e analisa suas complexidades de tempo.
1) O documento apresenta uma introdução sobre ordenação em JQuery e AJAX, incluindo métodos de ordenação como seleção, inserção e bolha. 2) São descritos conceitos como ordenação interna, externa e local, além de análises de eficiência dos algoritmos. 3) Métodos simples como seleção, inserção e bolha são comparados a métodos eficientes como quicksort e mergesort.
O documento apresenta os conceitos básicos de listas e como modelá-las utilizando vetores em programação estruturada. Descreve listas como uma estrutura de dados que armazena elementos em uma sequência e apresenta algoritmos para adicionar, remover e acessar itens na lista.
O documento descreve os conceitos básicos de listas e como modelar listas utilizando vetores em programação estruturada. As principais ideias apresentadas são:
1) Uma lista é um conjunto de dados ordenados ou não, que podem ocupar espaços de memória contíguos ou não;
2) Listas podem ser modeladas usando vetores, necessitando de um indicador do último elemento e tratamento para quando a lista está cheia;
3) São apresentados algoritmos básicos como adicionar, remover, verificar se a lista está cheia/vazia
O documento descreve uma aula sobre vetores, matrizes, classes e métodos em Java. Ele explica como armazenar e acessar elementos em vetores e matrizes usando índices, e fornece exemplos de declaração de vetores e matrizes. Também introduz conceitos básicos sobre classes e métodos em Java, incluindo como declarar classes públicas e privadas, e como derivar novas classes de classes existentes.
1. O documento descreve o desenvolvimento de algoritmos de ordenação em C#.
2. Cinco algoritmos são implementados: bubble sort, selection sort, insertion sort, merge sort e quick sort.
3. Testes unitários foram criados para cada algoritmo para validar sua funcionalidade e desempenho.
1. O documento apresenta os conceitos básicos de matemática aplicada à computação, incluindo razão e proporção, regra de três, porcentagem e outros tópicos.
2. É fornecido um cronograma de estudos com o planejamento das aulas ao longo das semanas.
3. As professoras incentivam o aluno a se dedicar aos estudos para compreender os importantes conceitos matemáticos apresentados.
1) O documento introduz a linguagem R, abordando sua história, instalação, editores de texto, manipulação de objetos, entrada e saída de dados, e distribuições de probabilidade.
2) São apresentados conceitos sobre modos e atributos de objetos no R, como vetores, matrizes, listas e data frames.
3) O documento também explica a importação e exportação de dados, e como gerar gráficos e saídas em diferentes formatos a partir do R.
Aulas de estrutura de dados por Ayrton YagamiAyrton Yagami
Este documento resume vários conceitos e implementações relacionadas a árvores e ordenação de dados, incluindo bubble sort, insertion sort, selection sort, recursividade, árvores binárias e AVL em Java. Há explicações teóricas e exemplos de código para cada tópico.
Este documento discute métodos de classificação de dados, incluindo classificação interna em memória primária e classificação externa em memória secundária. Apresenta algoritmos de classificação como inserção, troca, seleção, distribuição e intercalação, explicando seus princípios e desempenhos.
O documento discute a análise de componentes principais (ACP), uma técnica estatística multivariada utilizada para reduzir o número de variáveis correlacionadas a um conjunto menor de variáveis não correlacionadas. A técnica é aplicada a dados sobre taxas de criminalidade em cidades dos EUA para ilustrar como a ACP pode agrupar cidades com perfis criminais similares e reduzir as sete variáveis iniciais a componentes principais que retêm a maior parte da variação nos dados.
O documento descreve técnicas de hashing para busca em tabelas, incluindo: (1) a função de hash mapeia chaves de busca em índices de tabela para facilitar a busca; (2) colisões ocorrem quando chaves mapeiam para a mesma posição e devem ser resolvidas; (3) tabelas dinâmicas melhoram o desempenho aumentando o tamanho da tabela quando necessário.
O documento discute a complexidade de algoritmos e como analisá-la. Explica que a complexidade é medida pelo tempo de execução em função do tamanho do problema e apresenta exemplos de algoritmos com diferentes complexidades como constante, linear, quadrática e cúbica. Também apresenta regras para calcular a complexidade de algoritmos como laços aninhados e instruções consecutivas.
Este documento discute a complexidade de algoritmos e como analisá-la. Explica que a complexidade de tempo de um algoritmo é expressa como uma função do tamanho do problema e que a notação Big-O é usada para descrever o comportamento assintótico predominante. Também apresenta exemplos como ordenação de vetores e mostra que algoritmos para o mesmo problema podem ter diferentes complexidades de tempo.
O documento discute matrizes, definindo-as como uma coleção de variáveis do mesmo tipo armazenadas de forma contígua na memória e acessadas através de índices. Detalha como declarar e acessar elementos de matrizes unidimensionais e multidimensionais, incluindo como preencher, copiar e mostrar os dados de uma matriz.
1. O documento descreve algoritmos de ordenação e busca, incluindo Selection Sort, Bubble Sort, Quicksort, busca linear e binária.
2. São fornecidos exemplos de código em C para cada algoritmo, explicando seu funcionamento de forma concisa.
3. Os algoritmos ordenam vetores comparando valores e trocando de posição quando necessário (ordenação), ou buscam por um valor específico percorrendo o vetor (busca).
Este documento apresenta um resumo sobre listas encadeadas. As principais ideias apresentadas são:
1) Listas encadeadas são uma estrutura de dados recursiva na qual os elementos são ligados uns aos outros através de ponteiros, permitindo adicionar elementos dinamicamente sem preocupar com o tamanho da memória;
2) As operações sobre listas encadeadas geralmente são implementadas de forma recursiva, tratando casos triviais e reduzindo o problema a subproblemas menores;
3) Exemplos de operações comuns como tamanho, busca e inserção
O documento discute estruturas de dados, definindo-as como métodos particulares de implementar tipos abstratos de dados. Apresenta listas como uma estrutura de dados linear na qual os elementos preservam uma ordem sequencial, e descreve listas ordenadas como listas cujos elementos estão ordenados de acordo com um critério pré-estabelecido. Detalha a implementação de listas sequenciais e ordenadas sequenciais usando arrays.
1) O documento discute vários algoritmos de ordenação como selection sort, insertion sort, bubble sort e quicksort.
2) Cada algoritmo tem sua abordagem única para ordenar um conjunto de dados, seja manipulando elementos adjacentes ou dividindo o problema em subproblemas.
3) Os algoritmos mais avançados como quicksort podem ser mais rápidos para grandes volumes de dados devido ao uso de estruturas de dados auxiliares e abordagem recursiva.
O documento discute os três principais tipos de pesquisa de marketing: exploratória, descritiva e causal. A pesquisa exploratória tem como objetivo explorar um problema vagamente definido para orientar pesquisas mais detalhadas, a pesquisa descritiva descreve características de objetos ou fenômenos, e a pesquisa causal busca identificar relações de causa e efeito entre variáveis por meio de experimentos.
O documento discute os tipos de pesquisa científica, incluindo pesquisa básica versus aplicada, pesquisa exploratória, descritiva e explicativa, e pesquisa experimental, operacional e de estudo de caso. Também aborda fontes de informação para pesquisa, como pesquisa de campo e de laboratório, e estudos longitudinais versus transversais.
This document outlines the key concepts and steps of scientific research. It defines scientific research, lists the requirements and objectives of research, and classifies research by type and subject matter. It also details the planning, execution, writing, and publication stages of research and emphasizes the importance of thoroughness to research success.
O documento discute estratégias de pesquisa bibliográfica, incluindo tipos de pesquisa, fontes de informação e estratégias de busca. Aborda pesquisa qualitativa versus quantitativa, revisão bibliográfica versus pesquisa bibliográfica, e fatores a serem considerados ao selecionar fontes de informação para pesquisa.
Esta resolução estabelece as diretrizes e procedimentos para a realização do Trabalho de Conclusão de Curso (TCC) nos cursos de graduação da Universidade do Estado de Mato Grosso (UNEMAT), definindo as etapas, responsabilidades dos professores orientadores e alunos, critérios de avaliação e outras regulamentações.
O documento discute conceitos básicos de sistemas computacionais, definindo computador como uma máquina capaz de executar tarefas segundo instruções para solucionar problemas, e destacando que um sistema de computação compreende hardware (parte física) e software (parte lógica), que trabalham em conjunto para permitir o processamento de dados. Também define peopleware como as pessoas que trabalham com tecnologia da informação.
Mais conteúdo relacionado
Semelhante a 7082 texto do artigo-33807-2-10-20180903
1. O documento apresenta os conceitos básicos de matemática aplicada à computação, incluindo razão e proporção, regra de três, porcentagem e outros tópicos.
2. É fornecido um cronograma de estudos com o planejamento das aulas ao longo das semanas.
3. As professoras incentivam o aluno a se dedicar aos estudos para compreender os importantes conceitos matemáticos apresentados.
1) O documento introduz a linguagem R, abordando sua história, instalação, editores de texto, manipulação de objetos, entrada e saída de dados, e distribuições de probabilidade.
2) São apresentados conceitos sobre modos e atributos de objetos no R, como vetores, matrizes, listas e data frames.
3) O documento também explica a importação e exportação de dados, e como gerar gráficos e saídas em diferentes formatos a partir do R.
Aulas de estrutura de dados por Ayrton YagamiAyrton Yagami
Este documento resume vários conceitos e implementações relacionadas a árvores e ordenação de dados, incluindo bubble sort, insertion sort, selection sort, recursividade, árvores binárias e AVL em Java. Há explicações teóricas e exemplos de código para cada tópico.
Este documento discute métodos de classificação de dados, incluindo classificação interna em memória primária e classificação externa em memória secundária. Apresenta algoritmos de classificação como inserção, troca, seleção, distribuição e intercalação, explicando seus princípios e desempenhos.
O documento discute a análise de componentes principais (ACP), uma técnica estatística multivariada utilizada para reduzir o número de variáveis correlacionadas a um conjunto menor de variáveis não correlacionadas. A técnica é aplicada a dados sobre taxas de criminalidade em cidades dos EUA para ilustrar como a ACP pode agrupar cidades com perfis criminais similares e reduzir as sete variáveis iniciais a componentes principais que retêm a maior parte da variação nos dados.
O documento descreve técnicas de hashing para busca em tabelas, incluindo: (1) a função de hash mapeia chaves de busca em índices de tabela para facilitar a busca; (2) colisões ocorrem quando chaves mapeiam para a mesma posição e devem ser resolvidas; (3) tabelas dinâmicas melhoram o desempenho aumentando o tamanho da tabela quando necessário.
O documento discute a complexidade de algoritmos e como analisá-la. Explica que a complexidade é medida pelo tempo de execução em função do tamanho do problema e apresenta exemplos de algoritmos com diferentes complexidades como constante, linear, quadrática e cúbica. Também apresenta regras para calcular a complexidade de algoritmos como laços aninhados e instruções consecutivas.
Este documento discute a complexidade de algoritmos e como analisá-la. Explica que a complexidade de tempo de um algoritmo é expressa como uma função do tamanho do problema e que a notação Big-O é usada para descrever o comportamento assintótico predominante. Também apresenta exemplos como ordenação de vetores e mostra que algoritmos para o mesmo problema podem ter diferentes complexidades de tempo.
O documento discute matrizes, definindo-as como uma coleção de variáveis do mesmo tipo armazenadas de forma contígua na memória e acessadas através de índices. Detalha como declarar e acessar elementos de matrizes unidimensionais e multidimensionais, incluindo como preencher, copiar e mostrar os dados de uma matriz.
1. O documento descreve algoritmos de ordenação e busca, incluindo Selection Sort, Bubble Sort, Quicksort, busca linear e binária.
2. São fornecidos exemplos de código em C para cada algoritmo, explicando seu funcionamento de forma concisa.
3. Os algoritmos ordenam vetores comparando valores e trocando de posição quando necessário (ordenação), ou buscam por um valor específico percorrendo o vetor (busca).
Este documento apresenta um resumo sobre listas encadeadas. As principais ideias apresentadas são:
1) Listas encadeadas são uma estrutura de dados recursiva na qual os elementos são ligados uns aos outros através de ponteiros, permitindo adicionar elementos dinamicamente sem preocupar com o tamanho da memória;
2) As operações sobre listas encadeadas geralmente são implementadas de forma recursiva, tratando casos triviais e reduzindo o problema a subproblemas menores;
3) Exemplos de operações comuns como tamanho, busca e inserção
O documento discute estruturas de dados, definindo-as como métodos particulares de implementar tipos abstratos de dados. Apresenta listas como uma estrutura de dados linear na qual os elementos preservam uma ordem sequencial, e descreve listas ordenadas como listas cujos elementos estão ordenados de acordo com um critério pré-estabelecido. Detalha a implementação de listas sequenciais e ordenadas sequenciais usando arrays.
1) O documento discute vários algoritmos de ordenação como selection sort, insertion sort, bubble sort e quicksort.
2) Cada algoritmo tem sua abordagem única para ordenar um conjunto de dados, seja manipulando elementos adjacentes ou dividindo o problema em subproblemas.
3) Os algoritmos mais avançados como quicksort podem ser mais rápidos para grandes volumes de dados devido ao uso de estruturas de dados auxiliares e abordagem recursiva.
Semelhante a 7082 texto do artigo-33807-2-10-20180903 (16)
O documento discute os três principais tipos de pesquisa de marketing: exploratória, descritiva e causal. A pesquisa exploratória tem como objetivo explorar um problema vagamente definido para orientar pesquisas mais detalhadas, a pesquisa descritiva descreve características de objetos ou fenômenos, e a pesquisa causal busca identificar relações de causa e efeito entre variáveis por meio de experimentos.
O documento discute os tipos de pesquisa científica, incluindo pesquisa básica versus aplicada, pesquisa exploratória, descritiva e explicativa, e pesquisa experimental, operacional e de estudo de caso. Também aborda fontes de informação para pesquisa, como pesquisa de campo e de laboratório, e estudos longitudinais versus transversais.
This document outlines the key concepts and steps of scientific research. It defines scientific research, lists the requirements and objectives of research, and classifies research by type and subject matter. It also details the planning, execution, writing, and publication stages of research and emphasizes the importance of thoroughness to research success.
O documento discute estratégias de pesquisa bibliográfica, incluindo tipos de pesquisa, fontes de informação e estratégias de busca. Aborda pesquisa qualitativa versus quantitativa, revisão bibliográfica versus pesquisa bibliográfica, e fatores a serem considerados ao selecionar fontes de informação para pesquisa.
Esta resolução estabelece as diretrizes e procedimentos para a realização do Trabalho de Conclusão de Curso (TCC) nos cursos de graduação da Universidade do Estado de Mato Grosso (UNEMAT), definindo as etapas, responsabilidades dos professores orientadores e alunos, critérios de avaliação e outras regulamentações.
O documento discute conceitos básicos de sistemas computacionais, definindo computador como uma máquina capaz de executar tarefas segundo instruções para solucionar problemas, e destacando que um sistema de computação compreende hardware (parte física) e software (parte lógica), que trabalham em conjunto para permitir o processamento de dados. Também define peopleware como as pessoas que trabalham com tecnologia da informação.
O documento resume conceitos básicos de informática, definindo-a como o tratamento automático da informação utilizando computadores. Explica que computadores são máquinas para processar dados e gerar informações, e que o processamento de dados envolve a coleta de dados, seu tratamento e a geração de informações.
Este documento resume um trabalho de conclusão de curso sobre a avaliação de ferramentas de realidade virtual e aumentada como suporte ao manual do proprietário. O trabalho analisou diferentes aplicativos para visualização de modelos 3D em realidade virtual e aumentada, classificando-os quanto ao tipo de imersão, possibilidades de interação e capacidade de medir. O modelo BIM de um projeto foi publicado nesses aplicativos e testado em um celular. Concluiu-se que essas ferramentas podem auxiliar na interpretação do manual do proprietário
Este documento discute a simulação de infraestruturas computacionais para computação ubíqua, apresentando conceitos de computação ubíqua e grids computacionais. Também resume ferramentas de simulação como Bricks, GangSim, OptorSim e GridSim, descrevendo suas funcionalidades. Por fim, apresenta um estudo de caso utilizando a ferramenta de simulação SimGrid.
Este documento apresenta uma tese de doutorado sobre abstrações para linguagens de programação visando aplicações móveis em ambientes pervasivos. A tese propõe o ISAMadapt, uma linguagem e ferramenta para projetar aplicações adaptativas para dispositivos móveis em ambientes pervasivos considerando o contexto do usuário e do ambiente.
O documento discute a Internet das Coisas (IoT), definindo-a como uma extensão da Internet que conecta objetos do dia-a-dia com capacidade de processamento e comunicação. A IoT possibilita novas aplicações para a academia e indústria, mas também apresenta desafios técnicos e sociais. O texto descreve o estado da arte de IoT, abordando questões teóricas e práticas.
1) O documento discute os conceitos de computação ubíqua, móvel e pervasiva, como essas tecnologias estão presentes no dia-a-dia das pessoas e como as interfaces devem ser projetadas para esses sistemas.
2) É explicado que a computação ubíqua tem como objetivo tornar a interação com computadores mais natural, integrando a tecnologia às ações cotidianas das pessoas de forma imperceptível.
3) Características como affordance, interfaces multimodais e reconhecimento de contexto são importantes para o desenvolvimento
O documento discute a computação ubíqua, na qual computadores se tornam onipresentes em objetos do dia a dia de forma invisível ao usuário. Apresenta dois cenários que ilustram como dispositivos inteligentes e móveis podem coordenar-se para fornecer acesso imediato a serviços e aumentar as capacidades humanas de forma transparente. Também discute desafios como mobilidade, contexto e uso eficiente de recursos em redes sem fio.
O documento descreve o desenvolvimento do ACUMAAF, um ambiente de computação ubíqua para monitoramento e avaliação de atividade física de participantes de grupos. O ACUMAAF coleta dados fisiológicos em tempo real por meio de sensores sem fio e disponibiliza indicadores para apoiar políticas de promoção da atividade física.
Este documento descreve uma dissertação de mestrado sobre uma proposta de arquitetura de middleware chamada UbiquitOS para facilitar a adaptabilidade de serviços em sistemas de computação ubíqua. A dissertação apresenta o contexto da computação ubíqua e revisa projetos anteriores, abordando especificamente a adaptabilidade de serviços. Em seguida, discute como a adaptabilidade de serviços pode reduzir o desperdício de recursos e propõe o UbiquitOS como uma solução, descrevendo seu modelo de
O documento discute a computação ubíqua, definindo-a como um novo paradigma de computação caracterizado pela proatividade, onipresença, imperceptibilidade e naturalidade. Ele apresenta conceitos básicos da computação ubíqua, suas características, tecnologias essenciais, áreas de aplicação e exemplos de sistemas desenvolvidos, incluindo na educação, saúde, negócios e residências.
O documento descreve um sistema de monitoramento de temperatura corporal humana em tempo real utilizando software embarcado e computação ubíqua, com o objetivo de auxiliar a equipe médica. O sistema foi desenvolvido com base em pesquisa bibliográfica sobre computação ubíqua, pervasiva, física e sistemas em tempo real. O protótipo utiliza uma placa Arduino Uno conectada a sensores de temperatura para coletar e transmitir dados dos pacientes.
1. O documento discute algoritmos de pesquisa e ordenação em sistemas de informação.
2. São apresentados oito algoritmos de ordenação: inserção direta, seleção direta, bubblesort, mergesort, heapsort, quicksort, shellsort e radixsort.
3. Cada algoritmo é explicado com exemplos passo a passo utilizando vetores e figuras ilustrativas.
Este documento apresenta o plano de aula para a disciplina Introdução à Ciência da Computação II. Serão estudados algoritmos de busca, ordenação e estruturas de dados, com foco na análise da complexidade de tempo e memória. Os alunos implementarão e testarão algoritmos em laboratório e produzirão relatórios. A avaliação inclui atividades e trabalhos ao longo do semestre.
O documento discute duas alternativas para buscar um funcionário em um arquivo binário ordenado de funcionários: (1) busca sequencial, que lê o arquivo inteiro no pior caso, e (2) busca binária, que divide o arquivo ao meio em cada passo para encontrar o registro mais rápido. A busca binária é mais eficiente, com complexidade O(log n), em comparação com a busca sequencial de complexidade O(n).
1. 166
Anais do Encontro de Computação do Oeste Potiguar ECOP/UFERSA 2017
ISSN 2526-7574 – Pau dos Ferros/RN, v. 1, p. 166-173, jun. 2017
https://periodicos.ufersa.edu.br/index.php/ecop
Algoritmos de Ordenação: Um Estudo Comparativo
Jackson É. G. Souza¹, João V. G. Ricarte¹, Náthalee C. A. Lima²
1
Universidade Federal Rural do Semi-Árido, Curso de Ciência e Tecnologia.
2
Universidade Federal Rural do Semi-Árido, Centro Multidisciplinar de Pau dos Ferros.
jacksonegsouza@gmail.com, jv_ricarte@hotmail.com,
nathalee.almeida@ufersa.edu.br
Resumo. O acúmulo de dados torna-se cada vez mais um problema a ser
resolvido. Faz-se então, necessário o uso dos algoritmos de ordenação, que
nada mais são do que processos lógicos para se organizar uma determinada
estrutura linear, seja ela física ou não. Este estudo objetiva-se avaliar, por
meio de experimentação, os dados gerados com a utilização dos algoritmos de
ordenação Bubble Sort, Insertion Sort, Selection Sort, Merge Sort, Quick Sort
e Shell Sort, bem como, suas utilidades e eficiências. Para tanto, são
executados três testes com três vetores de tamanhos diferentes para cada
algoritmo e, os dados coletados foram comparados.
Abstract. Data stocking has become a problem to be solved. Thus, we ought to
use sorting algorithms, which are none other than logic processes to organize
a certain linear structure, being it physical or not. With this in mind, this study
aims to evaluate, through experimenting, the data gathered by using the
sorting algorithms Bubble Sort, Insertion Sort, Selection Sort, Merge Sort and
Shell Sort, as well as their utility and efficiency. To do such, for each
algorithm, we have executed three tests on three vectors of different sizes and
the data collected compared.
1. Introdução
Este estudo objetiva-se em avaliar, por meio de experimentação, os dados gerados com a
utilização dos algoritmos de ordenação Bubble Sort, Insertion Sort, Selection Sort, Merge
Sort, Quick Sort e Shell Sort, bem como, suas respectivas utilidades e eficiências. Para
tanto, são executados três testes com três vetores de tamanhos diferentes para cada
algoritmo e, os dados coletados são comparados. Apesar de ser possível a implementação
dos algoritmos de ordenação com qualquer estrutura linear, optamos por realizar os testes
apenas com algarismos numéricos inteiros (sequências de números) a fim de obtermos
dados quantitativos que facilitem o entendimento da análise posterior.
Trabalhos similares existem na literatura – (FOLATOR et al., 2014),
(HONORATO, 2013), (SILVA, 2010), (TELLES et al.,2015), (YANG et al., 2011) –, mas,
estes não relacionam os mesmos seis algoritmos referidos neste artigo.
Ao iniciar com um vetor com capacidade para 100 diferentes valores, são avaliados
os tempos de execução, os números de comparações e, os números de movimentações para
a organização de: a) uma lista ordenada em ordem crescente; b) uma lista ordenada em
ordem decrescente, e; c) uma lista desordenada com números aleatórios. O mesmo
2. 167
Anais do Encontro de Computação do Oeste Potiguar ECOP/UFERSA 2017
ISSN 2526-7574 – Pau dos Ferros/RN, v. 1, p. 166-173, jun. 2017
https://periodicos.ufersa.edu.br/index.php/ecop
procedimento é realizado com vetores de tamanhos 1.000 e 10.000. Com os resultados
espera-se apontar as vantagens e desvantagens ao se fazer uso de um algoritmo em
detrimento de outro.
O presente estudo se organiza de forma que, na segunda seção serão apresentados,
de forma breve, os algoritmos de ordenação que fazem parte deste estudo e seus respectivos
códigos em Linguagem C. Na seção 3 (três) serão apresentados os dados coletados nos
testes, bem como uma breve análise e, por fim, na seção 4 (quatro), serão apresentadas as
conclusões acerca da análise dos dados.
2. Algoritmos de Ordenação
Algoritmos de ordenação são algoritmos que direcionam para a ordenação, ou reordenação,
de valores apresentados em uma dada sequência, para que os dados possam ser acessados
posteriormente de forma mais eficiente. Uma das principais finalidades desse tipo de
algoritmo é a ordenação de vetores, uma vez que, em uma única variável pode-se ter
inúmeras posições, a depender do tamanho do vetor declarado. Por exemplo, a organização
de uma lista de presença escolar para que a relação fique organizada em ordem alfabética.
2.1. Bubble Sort
Este algoritmo é um do mais simples (SZWARCFITER e MARKENZON, 2015) e seu
funcionamento ocorre por meio da comparação entre dois elementos e sua permuta, de
modo que o elemento de maior valor fique à direita do outro (PEREIRA, 2010). “Após a
primeira passagem completa pelo vetor (...) podemos garantir que o maior item terá sido
deslocado para a última posição do vetor” [Pereira 2010, p.95]. Essa movimentação repete-
se até que o vetor fique totalmente ordenado.
void bubble (int *item, int count)
{ register int a, b;
register int t;
for(a=(count-1); a>0; a--) {
for(b=0; b<a; b++) {
if(item[b]>item[b+1]) {
t=item[b];
item[b]=item[b+1];
item[b+1]=t; } } } }
Fonte: SCHILDT (1996) (Editado pelo Autor, 2017).
2.2. Insertion Sort
O Insertion Sort é de fácil implementação, similar ao Bubble Sort (SZWARCFITER e
MARKENZON, 2015). Seu funcionamento se dá por comparação e inserção direta. A
medida que o algoritmo varre a lista de elementos, o mesmo os organiza, um a um, em sua
posição mais correta, onde o elemento a ser alocado (k) terá, a sua esquerda um valor
menor (k-1), e, de maneira similar, à sua direita um valor maior (k+1).
void insert (int *item, int count)
{ register int a, b, t;
for (a = 1; a < count; ++a) {
t = item[a];
for (b = a - 1; b >= 0 && t < item[b]; b--)
item[b+1] = item[b]; item[b+1] = t;} }
Fonte: SCHILDT (1996) (Editado pelo Autor, 2017).
3. 168
Anais do Encontro de Computação do Oeste Potiguar ECOP/UFERSA 2017
ISSN 2526-7574 – Pau dos Ferros/RN, v. 1, p. 166-173, jun. 2017
https://periodicos.ufersa.edu.br/index.php/ecop
2.3. Selection Sort
Um dos mais simples e utilizados, o Selection Sort tem como principal finalidade passar o
menor valor para a primeira posição, o segundo menor para a segunda posição, e assim
sucessivamente, para os n valores nas n posições, onde o valor à esquerda é sempre menor
que o valor à direita (valoresquerda < valordireita).
void select (int *item, int count)
{ register int a, b, c;
int exchange, t;
for (a = 0; a < count-1; ++a) {
exchange = 0;
c = a;
t = item[a];
for (b = a+1; b < count; ++b) {
if (item[b] < t) {
c = b;
t = item[b];
Exchange = 1; } }
if (exchange) {
item[c] = item[a];
item[a] = t; } } }
Fonte: SCHILDT (1996) (Editado pelo Autor, 2017).
2.4. Merge Sort
Este algoritmo tem como objetivo a reordenação de uma estrutura linear por meio da
quebra, intercalação e união dos n elementos existentes. Em outras palavras, a estrutura a
ser reordenada será, de forma recursiva, subdividida em estruturas menores até que não seja
mais possível fazê-lo. Em seguida, os elementos serão organizados de modo que cada
subestrutura ficará ordenada. Feito isso, as subestruturas menores (agora ordenadas) serão
unidas, sendo seus elementos ordenados por meio de intercalação (SZWARCFITER e
MARKENZON, 2015). O mesmo processo repete-se até que todos os elementos estejam
unidos em uma única estrutura organizada.
void merge(int v[],int n){
int meio, i, j, k;
int* auxiliar;
auxiliar =(int*) malloc(n * sizeof(int));
if (auxiliar==NULL){
return;}
meio = n/2;
i = 0; k=0;
j = meio;
while (i < meio && j < n) {
if (v[i] <= v[j]) {
auxiliar[k] = v[i++];
}else {auxiliar[k] = v[j++];
} ++k; }
if (i == meio) {
while (j < n) {
auxiliar[k++] = v[j++]; }
}else {
while (i < meio) {
auxiliar[k++] = v[i++]; } }
4. 169
Anais do Encontro de Computação do Oeste Potiguar ECOP/UFERSA 2017
ISSN 2526-7574 – Pau dos Ferros/RN, v. 1, p. 166-173, jun. 2017
https://periodicos.ufersa.edu.br/index.php/ecop
for (i = 0; i < n; ++i) {
v[i] = auxiliar[i]; }
free(auxiliar); }
void mergeSort(int v[], int n) {
int meio;
if (n > 1) {
meio = n / 2;
mergeSort(v, meio);
mergeSort(v + meio, n - meio);
merge(v, n); } }
Fonte: GIACON et al. (s.d.) (Editado pelo Autor, 2017).
2.5. Quick Sort
O Quick Sort usa do mesmo princípio de divisão que o Merge Sort, entretanto, o mesmo
não utiliza a intercalação, uma vez que não subdivide a dada estrutura em muitas menores.
Esse algoritmo simplesmente faz uso de um dos elementos da estrutura linear (determinada
pelo programador) como parâmetro inicial, denominado pivô. Com o pivô definido, o
algoritmo irá dividir a estrutura inicial em duas, a primeira, à esquerda, contendo todos os
elementos de valores menores que o pivô, e, à direita, todos os elementos com valores
maiores. Em seguida, o mesmo procedimento é realizado com o a primeira lista
(valoresmenores<pivô<valoresmaiores). O mesmo processo se repete até que todos os elementos
estejam ordenados (SZWARCFITER e MARKENZON, 2015).
void quick (int *item, int count)
{ Qs (item, 0, count -1) }
void Qs (int *item, int left, int right)
{ register int i, j;
int x, y;
i = left; j = right;
x = item[ ( left + right ) / 2 ];
do {
while ( item[ i ] < x && i < right ) i++;
while ( x < item[ j ] && j > left ) j--;
if ( i <= j ) {
y = item[ i ];
item[ i ] = item[ j ];
item[ j ] = y;
i++ ; j-- ; }
} while ( i <= j );
if ( left < j ) Qs ( item, left, j );
if ( i < right ) Qs ( item, i, right ); }
Fonte: SCHILDT (1996) (Editado pelo Autor, 2017).
2.6. Shell Sort
Baseado, de forma melhorada, no Insertion Sort, o Shell Sort é um algoritmo que, fazendo
uso de um valor de distanciamento, denominado gap, rearranja os elementos de uma
estrutura por meio de inserção direta (SILVA, 2010). O referido valor de distanciamento,
gap, nada mais é do que um valor que definirá a distância com que os elementos serão
comparados, ou seja, se no Insertion Sort cada elemento é comparado com o elemento
imediatamente subsequente, e, o de menor valor inserido na posição à esquerda do outro,
no Shell Sort, o gap, determinado pelo programador, fará com que os elementos a serem
5. 170
Anais do Encontro de Computação do Oeste Potiguar ECOP/UFERSA 2017
ISSN 2526-7574 – Pau dos Ferros/RN, v. 1, p. 166-173, jun. 2017
https://periodicos.ufersa.edu.br/index.php/ecop
comparados, não mais, sejam tão próximos. Essa pequena diferença pode parecer pouca,
mas, quando aplicada, faz com o que o processo seja mais rápido, visto que, devido a
distância de comparação, seria como se estivéssemos rearranjando não uma, mas duas
estruturas por vez.
void shellsort(int *vet, int count)
{ int i , j , value;
int gap = 1;
while(gap < count) {
gap = 3*gap+1; }
while ( gap > 1) {
gap /= 3;
for(i = gap; i < count; i++) {
value = vet[i];
j = i - gap;
while (j >= 0 && value < vet[j]) {
vet [j + gap] = vet[j];
j -= gap; }
vet [j + gap] = value; } } }
Fonte: O Autor (2017).
3. Resultados e Discussões
A Linguagem C foi definida como meio de codificação para a realização das simulações e a
IDE Code Blocks como ambiente de desenvolvimento. Quanto ao hardware, a máquina em
que os testes foram executados tem as seguintes configurações:
● Fabricante: 3GREEN Technology;
● Modelo: J1800;
● Processador: Intel(R) Celerom(R) Dual Core;
● Frequência: 2,41 GHz;
● Memória RAM: 8,00 GB (DDR3 1.333MHz);
● Sistema Operacional: Windows 10 PRO (64 bits).
3.1. Teste em um Vetor de 100 Elementos
A Tabela 1 mostra os valores médios do desempenho dos algoritmos ao lidar com uma lista
pré-ordenada de forma crescente, decrescente e aleatória.
Tabela 1. Valores médios de desempenho para um vetor [100]
VETOR [100]
Lista Ordem Crescente Ordem Decrescente Ordem Aleatória
Algoritmo Tempo (s) Comp. Trocas Tempo (s) Comp. Trocas Tempo (s) Comp. Trocas
Bubble Sort 0,0002364 4950 0 0,0002693 4950 4950 0,000236 4950 2377
Insertion Sort 0,0001528 99 0 0,0001953 99 4950 0,000175 99 24941
Selection Sort 0,0001954 4950 0 0,0001929 4950 50 0,0001951 4950 93,5
Merge Sort 0,0000691 699 1200 0,0000672 419 1236 0,000072 659,6 1218,8
Quick Sort 0,000045803 4950 0 0,000118511 4950 4950 0,000031697 641,1 2566,1
Shell Sort 0,0001441 342 0 0,0001479 342 230 0,0001575 342 419,7
6. 171
Anais do Encontro de Computação do Oeste Potiguar ECOP/UFERSA 2017
ISSN 2526-7574 – Pau dos Ferros/RN, v. 1, p. 166-173, jun. 2017
https://periodicos.ufersa.edu.br/index.php/ecop
Podemos observar que, em uma lista já ordenada, o Insertion Sort foi o que
apresentou o melhor desempenho por executar o menor número de comparações e nenhuma
troca (swap). De forma oposta, o Merge Sort, além de ter sido o único que apresentou
trocas, obteve um alto valor. Esse resultado se deve ao fato do Insertion Sort avaliar o
vetor, comparando seus elementos, de forma global, o que permite identificar, em primeira
instância, que o mesmo já está organizado como deveria, e, portanto, não há necessidade de
permuta. O mesmo não pode ser dito a respeito do Merge Sort que, recursivamente,
subdivide o vetor em estruturas menores para, somente depois, efetuar comparações, e, por
fim, reestruturá-lo novamente. Ou seja, independente do vetor já estar ordenado, o
algoritmo efetuará permutas até que todas as subdivisões voltem a ser uma única estrutura.
Em uma lista com a ordenação decrescente, é possível identificar que, devido a sua
abordagem de comparação e inserção com distanciamento, o Shell Sort apresenta o melhor
desempenho com o menor número de comparações e trocas. Os Bubble Sort e o Quick Sort,
de modo contrário, ao percorrer todo o vetor, comparando e permutando (quando preciso),
demonstram sua ineficiência – para o teste em questão – ao atingir altos valores, mesmo
que o Quick Sort apresente o segundo menor tempo de execução.
Na ordenação de uma lista com elementos aleatórios, observa-se que, de modo
geral, o Shell Sort tem a melhor relação comparações-trocas, sendo, assim, considerado o
de melhor desempenho. Por outro lado, o Bubble Sort apresenta o pior desempenho,
resultando em altos valores de comparações e trocas.
3.2. Vetores com 1.000 e 10.000 Elementos.
Abaixo, os dados do vetor [1000] são exibidos nas Tabela 2.
Tabela 2. Valores médios de desempenho para um vetor [1000]
VETOR [1.000]
Lista Ordem Crescente Ordem Decrescente Ordem Aleatória
Algoritmo Tempo (s) Comp. Trocas Tempo (s) Comp. Trocas Tempo (s) Comp. Trocas
Bubble Sort 0,0043496 499500 0 0,0099207 499500 499500 0,0078604 499500 249816
Insertion Sort 0,1647 999 0 0,0046157 999 499500 0,0024474 999 252804,5
Selection Sort 0,0043271 499500 0 0,0004063 499500 500 0,0044346 499500 993,1
Merge Sort 0,000654 9999 1800 0,0006236 5555 18488 0,000734 9643,5 18247
Quick Sort 0,004434646 499500 0 0,01230268 499500 499500 0,1948871 10592,7 250206,8
Shell Sort 0,0002319 5457 0 0,0002702 5457 3920 0,000385 5457 8301,7
Similar ao vetor com 100 elementos, podemos ver que, em uma lista ordenada de
forma crescente, no que se refere as comparações e trocas, o Insertion Sort continua sendo
o algoritmo com melhor desempenho e, o Merge Sort com o pior. Do mesmo modo, em
uma lista decrescente, podemos ver que, o Shell Sort continua apresentando o melhor
desempenho, e, o Bubble Sort e o Quick Sort o menos satisfatório. Quanto a lista aleatória,
o Shell Sort mantém a melhor performance, assim como, o Bubble Sort permanece com
altos valores de comparações e trocas.
Na Tabela 3, assim como nas tabelas anteriores, temos os resultados dos testes
realizados com o vetor de dez mil (10.000) posições.
7. 172
Anais do Encontro de Computação do Oeste Potiguar ECOP/UFERSA 2017
ISSN 2526-7574 – Pau dos Ferros/RN, v. 1, p. 166-173, jun. 2017
https://periodicos.ufersa.edu.br/index.php/ecop
Tabela 3. Valores médios de desempenho para um vetor [10000]
VETOR [10.000]
Lista Ordem Crescente Ordem Decrescente Ordem Aleatória
Algoritmo Tempo (s) Comp. Trocas Tempo (s) Comp. Trocas Tempo (s) Comp. Trocas
Bubble Sort 0,4269048 49995000 0 0,9847921 49995000 49995000 0,7649256 49995000 25084128,1
Insertion Sort 0,0003026 9999 0 0,4580984 9999 49995000 0,225615 9999 24963151
Selection Sort 0,3637704 49995000 0 0,3827789 49995000 5000 0,360824 49995000 9988
Merge Sort 0,0058387 135423 250848 0,0056613 74911 254944 0,006185 132011,1 252879
Quick Sort 0,4415975 49995000 0 1,192945 49995000 49995000 0,1867259 158055 25098217,7
Shell Sort 0,001431 75243 0 0,0019362 75243 161374 0,0034228 75243 161374
Mais uma vez identificamos que o padrão se repete, em um vetor pré-ordenado, o
Insertion Sort é o algoritmo que tem a melhor performance. Igualmente, o Merge Sort
continua a apresentar resultados insatisfatórios. Os resultados obtidos com as listas
decrescente e aleatória correspondem aos anteriores, executados com vetores menores.
4. Conclusão
O algoritmo Bubble Sort, apesar de ser o de mais fácil implementação, não apresenta
resultados satisfatórios, principalmente no número de comparações. A ineficiência desse
algoritmo pode ser traduzida como um grande consumo de processamento, o que, para
máquinas com poucos (ou limitados) recursos computacionais, resulta em lentidão e longos
períodos de espera. Sua aplicação é, na opinião dos autores, indicada somente para fins
educacionais, visto que um projeto com o mesmo pode ser considerado ineficiente e/ou
fraco (SILVA, 2010).
O Insertion Sort, por sua vez, é útil para estruturas lineares pequenas, geralmente
entre 8 e 20 elementos, sendo amplamente utilizados em sequências de 10 elementos, tendo
ainda, listas ordenadas de forma decrescente como pior caso, listas em ordem crescente
como o melhor caso e, as demais ordens como sendo casos medianos. Sua principal
vantagem é o pequeno número de comparações, e, o excessivo número de trocas, sua
desvantagem. Como exemplo de uso, tem-se a ordenação de cartas de um baralho.
O Selection Sort torna-se útil em estruturas lineares similares ao do Insertion Sort,
porém, com o número de elementos consideravelmente maior, já que, o número de trocas é
muito inferior ao número de comparações, consumindo, assim, mais tempo de leitura e
menos de escrita. A vantagem de seu uso ocorre quando se trabalha com componentes em
que, quanto mais se escreve, ou reescreve, mais se desgasta, e, consequentemente, perdem
sua eficiência, como é o caso das memórias EEPROM e FLASH.
Ambos os algoritmos (Insertion e Selection), apesar de suas diferentes
características, são mais comumente utilizados em associação com outros algoritmos de
ordenação, como os Merge Sort, Quick Sort e o Shell Sort, que tendem a subdividir as listas
a serem organizadas em listas menores, fazendo com que sejam mais eficientemente
utilizados.
O Merge Sort apresenta-se, em linhas gerais, como um algoritmo de ordenação
mediano. Devido a recursividade ser sua principal ferramenta, seu melhor resultado vem ao
lidar com estruturas lineares aleatórias. Entretanto, ao lidar com estrutura pequenas e/ou já
8. 173
Anais do Encontro de Computação do Oeste Potiguar ECOP/UFERSA 2017
ISSN 2526-7574 – Pau dos Ferros/RN, v. 1, p. 166-173, jun. 2017
https://periodicos.ufersa.edu.br/index.php/ecop
pré-ordenada (crescente ou decrescente), a recursividade passa a ser uma desvantagem,
consumindo tempo de processamento e realizando trocas desnecessárias. Esse algoritmo é
indicado para quando se lida com estruturas lineares em que a divisão em estruturas
menores sejam o objetivo, como, por exemplo, em filas para operações bancárias.
O algoritmo Quick Sort, ao subdividir o vetor e fazer inserções diretas utilizando um
valor de referência (pivô), reduz seu tempo de execução, mas, as quantidades de
comparações (leitura) e, principalmente, trocas (escrita) ainda são muito altas. Apesar
disso, o Quick Sort se apresenta uma boa opção para situações em que o objetivo é a
execução em um menor tempo, mesmo que para isso haja um detrimento em recursos
computacionais de processamento.
O Shell Sort, baseado nos dados deste trabalho, é o que apresenta os resultados mais
satisfatórios, principalmente com estruturas maiores e desorganizadas. Por ser considerado
uma melhoria do Selection Sort, o Shell Sort, ao ser utilizado com as mesmas finalidades
que seu predecessor – recursos que demandem pouca escrita – irá apresentar um melhor
desempenho, e, consequentemente, expandir a vida útil dos recursos.
5. Referências
Folador, J. P., Neto, L. N. P., Jorge, D. C. (2014). “Aplicativo para Análise Comparativa do
Comportamento de Algoritmos de Ordenação.” Revista Brasileira de Computação
Aplicada (ISSN 2176-6649), Passo Fundo, v. 6, n. 2, p. 76-86, out. 2014.
Giacon, A. P. Folis, D. C., Hernandes, D. N. Spadotim, F. C. "Mergesort".
http://www.ft.unicamp.br/liag/siteEd/includes/arquivos/MergeSortResumo_Grupo4
_ST364A_2010.pdf, setembro.
Honorato, B. (2013). "Algoritmos de ordenação: análise e comparação."
http://www.devmedia.com.br/algoritmos-de-ordenacao-analise-e-
comparacao/28261, abril.
Pereira, S. L. (2010). “Algoritmos e Lógica de Programação em C: uma abordagem
didática.” 1ª edição. São Paulo. Érica.
Schildt, H. “C, Completo e Total.” (1996). 3ª edição. São Paulo. Makron Books.
Silva, E. S. (2010). “Estudo Comparativo de Algoritmos de Ordenação.” 33 f. Trabalho de
Conclusão de Curso – Universidade Federal do Espírito Santo, São Mateus.
Szwarcfiter, J. L. and Markezon, L. (2015). “Estruturas de Dados e Seus Algoritmos.” 3ª
edição. Rio de Janeiro. LTC.
Telles, M. J., Santini, P. H., Rigo, S. J., Santos, J. V. C., Barbosa, J. L.V. (2015). “iSorting:
um Estudo Sobre Otimização em Algoritmos de Ordenação”. Revista Brasileira de
Computação Aplicada (ISSN 2176-6649), Passo Fundo, v. 7, n. 1, p. 01-15, abr.
2015.
Yang, Y., Yu, P., Gan, Y. (2011). “Experimental Study on the Five Sort Algorithms.”
Second International Conference on Mechanic Automation and Control
Engineering, 2011. IEEE Xplore, 2011. p. 1314-1317. ISBN 978-1-4244-9439-2.