Skip to content

Este repositório contém uma série de implementações de algoritmos de busca e ordenação que fazem parte de um estudo para o curso de Estruturas de Dados de minha faculdade. Abaixo estão as descrições de alguns algoritmos implementados, comparações de desempenho e exemplos de uso. Não é certeza que esses dados estão 100% corretos.

License

Notifications You must be signed in to change notification settings

Fariasartuur/SearchSortAlgorithms

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Algoritmos de Busca & Ordenação

Este repositório contém uma série de implementações de algoritmos de busca e ordenação que fazem parte de um estudo para o curso de Estruturas de Dados de minha faculdade. Abaixo estão as descrições de alguns algoritmos implementados, comparações de desempenho e exemplos de uso.

Algoritmos de Busca

  • Binary Search
  • Interpolation Search
  • Jump Search
  • Exponential Search
  • Ternary Search

Algoritmos de Ordenação

  • Shell Sort
    • Shell
    • Knuth
    • Hibbard
  • Merge Sort
  • Selection Sort
  • Bucket Sort
  • Radix Sort
    • Base 10
    • Base 2
  • Quick Sort
    • First Pivot
    • Middle Pivot
    • Last Pivot

Algoritmo de Busca

Comparação de Tempo & Complexidade

Comparação de Tempo Complexidade de Tempo
Algorithm Tempo de Execução - Lista Pequena Tempo de Execução - Lista Média Tempo de Execução - Lista Grande Melhor Caso Médio Caso Pior Caso Complexidade de Espaço
Binary Search 0,012787 0,000107 0,000048 O(1) O(log n) O(log n) O(1)
Interpolation Search 0,000244 0,000199 0,000197 O(1) O(n) O(log(log n)) O(1)
Jump Search 0,000422 0,000100 0,000073 O(√n) O(√n) O(√n) O(1)
Exponential Search 0,000265 0,000068 0,000174 O(1) O(log n) O(log n) O(1)
Ternary Search 0,000243 0,000178 0,000096 O(1) O(log₃ n) O(log₃ n) O(1)

Algoritmo de Ordenação

Comparação de Tempo & Complexidade

Comparação de Tempo Complexidade de Tempo
Algoritmo Tempo de Execução Numero de Comparação Melhor Caso Médio Caso Pior Caso Complexidade de Tempo
Shell Sort (Knuth) 0.000007 40 O(n log n) - O(n^(3/2) O(1)
Shell Sort (Shell) 0.000008 36 O(n log n) O(n^(3/2)) O(n²) O(1)
Quick Sort (Middle Pivot) 0.000020 61 O(log n) O(n log n) O(n²) O(log n)
Radix Sort (Base 10) 0.000020 88 O(n * k) O(n * k) O(n * k) O(n + k)
Quick Sort (First Pivot) 0.000039 210 O(log n) O(n log n) O(n²) O(log n)
Quick Sort (Last Pivot) 0.000043 210 O(log n) O(n log n) O(n²) O(log n)
Selection Sort 0.000019 231 O(n²) O(n²) O(n²) O(1)
Bucket Sort 0.000067 22 O(n + k) O(n + k) O(n²) O(n + k)
Merge Sort 0.000095 76 O(n log n) O(n log n) O(n log n) O(n)
Radix Sort (Base 2) 0.000070 308 O(n * k) O(n * k) O(n * k) O(n + k)
Shell Sort (Hibbard) 0.002483 48 O(n log n) O(n^(3/2)) O(n²) O(1)

Estabilidade dos Algoritmos de Ordenação

1. Shell Sort

  • Estabilidade: Não estável
  • Por quê? Durante o processo de comparação de elementos em grandes intervalos, elementos iguais podem ser deslocados, alterando sua ordem relativa.
  • Exemplo:
    • Original: [(3, A), (3, B), (2, C)]
    • Shell Sort: [(2, C), (3, B), (3, A)]

2. Merge Sort

  • Estabilidade: Estável
  • Por quê? Durante a intercalação de sub-arrays ordenados, os elementos iguais são copiados na ordem em que aparecem nos sub-arrays.
  • Exemplo:
    • Original: [(3, A), (2, B), (3, C)]
    • Merge Sort: [(2, B), (3, A), (3, C)]

3. Selection Sort

  • Estabilidade: Não estável
  • Por quê? Durante o processo de troca do menor elemento com o elemento atual, a ordem relativa de elementos iguais pode mudar.
  • Exemplo:
    • Original: [(3, A), (3, B), (2, C)]
    • Selection Sort: [(2, C), (3, B), (3, A)]

4. Bucket Sort

  • Estabilidade: Estável (se o método usado dentro de cada balde for estável)
  • Por quê? Elementos iguais caem no mesmo balde, e sua ordem relativa é preservada se o método de ordenação usado nos baldes for estável (por exemplo, Merge Sort).
  • Exemplo:
    • Original: [(3, A), (3, B), (2, C)]
    • Bucket Sort: [(2, C), (3, A), (3, B)]

5. Radix Sort

  • Estabilidade: Estável
  • Por quê? Ele ordena os dígitos do menos significativo para o mais significativo, usando um algoritmo de ordenação estável (geralmente Counting Sort) em cada etapa.
  • Exemplo:
    • Original: [(32, A), (32, B), (21, C)]
    • Radix Sort: [(21, C), (32, A), (32, B)]

6. Quick Sort

  • Estabilidade: Não estável
  • Por quê? Durante o particionamento, elementos iguais podem ser colocados em lados diferentes do pivô, alterando sua ordem relativa.
  • Exemplo:
    • Original: [(3, A), (3, B), (2, C)]
    • Quick Sort: [(2, C), (3, B), (3, A)]

Gráficos

Aqui está um gráfico de colunas representando os algoritmos de ordenação:

Merge Sort

Column Graphic

Quick Sort

Column Graphic

Selection Sort

Column Graphic

About

Este repositório contém uma série de implementações de algoritmos de busca e ordenação que fazem parte de um estudo para o curso de Estruturas de Dados de minha faculdade. Abaixo estão as descrições de alguns algoritmos implementados, comparações de desempenho e exemplos de uso. Não é certeza que esses dados estão 100% corretos.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages