O Bubble Sort é ruim, mas tem algoritmo pior?

우리는 알고리즘을 기반으로 알고리즘을 결정하고 결정을 내릴 때 순서를 결정하고 버블 정렬을 결정하는 방법을 결정합니다: 순서가 비효율적일 때 문제를 해결할 수 있습니다.



Na verdade, existem várias outras soluções para este problema, mas resumidamente aqui está uma tabela comparando o tempo de complexidade de alguns algoritmos de ordenação:


알고리즘
처형


버블 정렬
오(n^2)

삽입 정렬
오(n^2)

선택 정렬
오(n^2)

힙 정렬
O(nlog_2n)

병합 정렬
O(nlog_2n)

퀵소트
오(log2n)


É bastante fácil de notar que de maneira geral os algoritmos de ordenação simples tem complexidade n^2, enquanto outros como Merge Sort n log_2 n, apesar da complexidade, cada um tem um desempenho melhor ou pior em cada caso. 마스...

버블 정렬이 무엇입니까?

답변 요청: ✨ dá ✨

답장: Stooge Sort와 같은 알고리듬이 존재합니다. E ele funciona da seguinte maneira: sua logica lembra o Bubble Sort, semper faz a comparação de posições do arranjo em pares, e procurando o maior elemento, porém implementado de forma recursiva.

O pseudocódigo dessa criaturinha é o seguinte:

Se o valor do primeiro item for maior do que o último:
    trocar o primeiro e o último valor;

Se o arranjo possuir 3 elementos ou mais:
    recursivamente chamar stooge sort com os primeiros 2/3 do arranjo;
    recursivamente chamar stooge sort com os últimos 2/3 do arranjo;
    recursivamente chamar stooge sort com os primeiros 2/3 do arranjo;

retornar arranjo;


C++ fica assim에서 구현:

void stoogeSort(int arr[], int left, int right){
    if (left >= right) return;
    if (arr[left] > arr[right]) swap(arr[left], arr[right]);
    if ((right - left + 1) > 2){
        int t = floor((right - left + 1)/3);
        stoogeSort(arr, left, right - t);
        stoogeSort(arr, left + t, right);
        stoogeSort(arr, left, right - t);
    }
}


O(n^2.7)의 복잡도는 버블 정렬보다 훨씬 더 복잡합니다. Olhando para os números, não parece ter tanta diferença de O(n^2) e O(n^2.7), certo?

Bom, pode não parecer tão pior, mas para isso precisamos testar 😄.

고환



Os testes foram executados em uma máquina com as seguintes configurações:

LSB Version:    n/a
Distributor ID: ManjaroLinux
Description:    Manjaro Linux
Release:        21.2.6
Codename:       Qonos
-----------
Arquitetura:                  x86_64
  Modo(s) operacional da CPU: 32-bit, 64-bit
  Tamanhos de endereço:       43 bits physical, 48 bits virtual
  Ordem dos bytes:            Little Endian
CPU(s):                       6
  Lista de CPU(s) on-line:    0-5
ID de fornecedor:             AuthenticAMD
  Nome do modelo:             AMD Ryzen 5 3500X 6-Core Processor
    Família da CPU:           23
    Modelo:                   113
    Thread(s) per núcleo:     1
    Núcleo(s) por soquete:    6
    Soquete(s):               1
    Step:                     0
    Aumento de frequência:    habilitado
    CPU(s) scaling MHz:       87%
    CPU MHz máx.:             4520,8979
    CPU MHz mín.:             2200,0000
    BogoMIPS:                 7902.79
----------
MemTotal:       16356904 kB (a.k.a 16GB de ram :))



10, 100, 1000, 10.000, 100.000 및 1.000.000개의 숫자가 반복되고 순서대로 나열됩니다. Porém o Stooge Sort não colaborou, você pode ver os resultados no Github em números reais, neste arquivo e também neste mas o que vale a pena mencionar é que para ordenar o arranjo de 100.000 números o Stooge Sort levou 155662 segundos, convertendo isso dá mais ou menos 43 horas (vale a pena mencionar que o tempo medido é de processador, não de relógio), e devido a isto, os testes foram realizados apenas até o arranjo de 100.000 números. 버블 정렬에 관심이 있는 사용자는 32개의 순서로 정렬된 순서대로 정렬할 수 있습니다. É uma diferença enorme né?

Tendo dito isso, mostrar o gráfico comparando os tempos de todos os algoritmos é até sem graça... pois ele ficou um pouco esticado:


Basicamente o Stooge Sort é mais lento que todos os algoritmos na maioria dos cenários testados, e não é um pouco pior: na verdade é ridiculamente pior, apesar disso é um algoritmo interessante como objeto de estudo :), você pode ler mais sobre o Stooge nas references abaixo를 정렬합니다.

참조
https://www.ijitee.org/wp-content/uploads/papers/v8i12/L31671081219.pdf

https://is.muni.cz/th/gp4gz/bc.pdf

https://www.geeksforgeeks.org/

좋은 웹페이지 즐겨찾기