bubble sort e algoritmo de classificação rápida

preâmbulo:

Um algoritmo bubble sort

Dois bolha realização programa espécie

Três algoritmo de ordenação rápida

Quatro classificação rápida realização do programa algoritmo

O algoritmo de ordenação primeira bolha

breve introdução

Bubble Sort (Bubble Sort), é uma ciência da computação simples campo algoritmo de classificação .

Ele elementos da coluna para ordenar visitou várias vezes, a fim de comparar dois elementos adjacentes, se sua ordem (como descendente, a primeira letra de A a Z) erros que troca assumiu. Trabalhando elemento de visita é repetido até que não há necessidade de trocar elementos adjacentes, ou seja, a coluna elemento tem sido ordenados concluída.

O nome vem do algoritmo de facto elementos maiores irão trocar gradualmente através de um "flutuador" para o início do número da coluna (ascendente ou descendente), como se o dióxido de carbono das bolhas numa bebida gaseificada, eventualmente, flutuar para o topo do mesmo bolha, daí o nome" classificar ".

princípio

algoritmo princípio bubble sort é a seguinte:

  1. Comparar elementos adjacentes. Se a primeira é maior do que o segundo, os dois trocaram.

  2. Fazer o mesmo trabalho para cada par de elementos adjacentes, desde o início do primeiro par ao final do último par. Neste ponto, deve ser o último elemento é o maior número.

  3. Repita essas etapas para todos os elementos, exceto a última.

  4. Continua a repetir os passos acima descritos para cada vez menos e menos elementos, um par de números até que não haja necessidade de comparar.

Análise Algorithm

complexidade de tempo

Se o estado inicial é o arquivo de sequência positiva, uma passagem para completar o pedido. O número de comparações necessárias palavras-chave  e registrar o número de celular  

Ter atingido um mínimo:

  ,

  .

Portanto, a melhor bubble sort complexidade de tempo é   .
Se o arquivo original está em ordem inversa, a necessidade de

  

Classificando viagem. Para ordenar por viagem

  

Comparação dos tempos de uma palavra-chave (1≤i≤n-1), e um registo de cada comparação deve ser movido três vezes para conseguir posição de troca de ficha. Neste caso, a comparação e atingiu o número máximo de celular:

O pior complexidade de tempo de bubble sort é

  .

 [1]  Em resumo, por conseguinte, a média bolha tipo complexidade global tempo é

  .

estabilidade Algorithm

Bubble sort é os elementos pequenos movê-lo para frente ou para trás nas grandes elementos. Comparação entre dois elementos adjacentes é mais, também a troca ocorre entre estes dois elementos. Portanto, se os dois elementos são iguais, então a troca não irá, se não há dois elementos adjacentes iguais, mesmo que a frente por permuta de pares a duas adjacentes-se, desta vez não serão trocados, os mesmos elementos antes e após a ordem não mudou, de modo que o bubble sort é um algoritmo estável espécie.

O segundo algoritmo bubble sort

linguagem C

#include <stdio.h>
#define ARR_LEN 255 / * comprimento máximo do array * /
#define elemType int / * Tipo de elemento * /
/ * bubble sort * /
/ * 1. A partir do elemento atual, para trás sequencialmente comparando cada elemento adjacente, se a comutação reversa * /
/ * 2. repetição dos passos anteriores para todos os elementos, até o último elemento de * /
/ * elemType ARR []: triagem da matriz de destino; int len: o número de elementos * /
BubbleSort vácuo (elemType ARR [], int len) {
    elemType TEMP;
    eu int, J;
    for (i = 0; I <len-1; i ++) / * o circuito externo é para classificar o número de voltas, o número len para len-1 vezes * /
        para (j = 0; J <; vezes. len- 1-j i ++) {/ * o loop interno é o número de vezes por comparação viagem, o i-ésimo comparador viagem len-i * /
            IF (ARR [J]> ARR [J + 1]) {/ * comparando elementos adjacentes, então o interruptor quando a ordem inversa (maior do que o direito do ascendente esquerda, descendente e vice-versa) * /
                TEMP = ARR [J];
                ARR [J] = ARR [J + 1];
                ARR [J + . 1] = TEMP;
            }
        }
}
 
int principal (void) {
    elemType arr [ARR_LEN] = {3,5,1, -7,4,9, -6,8,10,4};
    int len = 10;
    int i;
    BubbleSort (arr, len);
    for (i = 0; i <len; i ++)
        printf ( "% d \ t", arr [i]);
    putchar ( '\ n');
    return 0;
}

3 Breve algoritmo de classificação

classificação rápida (Quicksort) é uma melhoria sobre o tipo de bolha.

Breve tipo proposto por CAR Hoare em 1960. A idéia básica é: uma viagem ao ordenar os dados a serem classificados em duas partes independentes, a parte onde todos os dados do que a outra parte de todos os dados para ser pequeno, então este método de dados para as duas partes rápido separadamente triagem, a triagem de todo o processo pode ser de forma recursiva, a fim de alcançar os dados inteiros numa sequência ordenada.

É fornecido para classificar a matriz A [0] ...... Um [N-1], seleccionar qualquer de um primeiro dados (o primeiro número é geralmente escolhida de matriz) de dados como uma chave, e, em seguida, todos é menor do que o número dos que são colocados em esquerda, todos maiores do que seus números são colocados à sua direita, um processo conhecido como uma viagem para a classificação rápida. É digno de nota que, rápida tipo não é um algoritmo de ordenação estável, isto é, as mesmas posições relativas da pluralidade de valores podem oscilar no final do algoritmo.

Uma viagem ao algoritmo de ordenação rápida é:

1) definir duas variáveis ​​de i, j, no início do tipo: i = 0, j = N-1;

2) para o primeiro elemento de matriz como os dados de chave, atribuído a chave , isto é, chave = A [0];

3) Pesquisa para a frente a partir de j, isto é, começando a partir da pesquisa para a frente (J,), para encontrar um inferior a primeira chave valor Um [j], o A [j] e A [i] troca valor;

4) começam na parte de trás pesquisa i, isto é, antes do início da busca para trás (i ++), encontra o primeiro é maior do que a chave de A [i], o A [i] e troca Um [j] valor;

5) Repita os passos 3 e 4 até que i = j; (3,4 etapa, não encontrou valor qualificado, isto é, 3 A [j] é não inferior à chave , em 4 a [i] não é maior do que a. Tecla vez mudando j, o valor de I de tal modo que j = j-1, i = i + 1, até encontrar encontrado valor qualificado, quando a troca de i, j posição do ponteiro inalterada. Além disso, i == j que processo deve ser exatamente o tempo i + J ou concluída, de modo que neste momento o fim do ciclo).

Pode funcionar qsort () pode ser encomendado gama diretamente em linguagem C. 

uso:

qsort vazio (base void *, int nelem, largura, int (* FCMP) (* const vazio, const void *));

Parâmetros:
  um primeiro endereço a ser classificados de matriz
  2 para ser matriz classificada elemento número
  3 na pegada o tamanho de cada elemento
  ponteiro 4 pontos de uma função para determinar sequencialmente uma ordenação

complexidade de tempo

Melhor caso complexidade de tempo de O (nlogn), o processo é mais complexo, não é repetida aqui.

Cada tomar o pior caso para o número (número de referência) é o valor máximo / mínimo da corrente a ser comparado é, neste caso, de cada vez apenas para obter um número de sequência inferior a 1 (isto é, quer tudo maior do que o número de referência, ou menor do que a referência completa), em seguida, uma espécie de bolha é equivalente, o número de comparações = (n - 1) + (n - 2) + ... + 2 + 1 = ( n - 1) * n / 2, neste caso complexidade de tempo é: O (n ^ 2). Normalmente, ele aparece no pior caso: ser dados ordenados em si já é uma sequência positiva ou linha ordem inversa bom.

complexidade espaço

  Na verdade, esta não é uma boa cálculo complexidade espacial, porque algumas pessoas usam a classificação não-lugar, calculado como ruim (porque algumas pessoas usaram a matriz auxiliar, por isso, é necessário calcular o número de seu elemento) , vou analisar no espaço situ sob complexidade quicksort dela;

        Primeiro lugar espaço quick utilizado é O (1), que é um nível constante, e o espaço real é consumido por chamadas recursivas, porque cada necessário recursiva para manter alguns dos dados;

     A complexidade óptima espaço caso: O (log n); bissecta a matriz de cada vez que um caso

     O pior caso complexidade espaço é: O (n); caso degenerado do tipo bolha

 

Quarta  rápida realização programa de algoritmo de ordenação

A rápida espécie de mais rápido, porque em comparação com bubble sort, cada bolsa é trancos e barrancos. Toda vez que ao ordenar um ponto de referência definido, o ponto de referência será menor do que igual ao número de todos colocados à esquerda do ponto de referência, o ponto de referência será maior do que o número igual ao de referência total para o ponto certo. Então, cada vez que o câmbio não vai ser o mesmo que o tipo de bolha só podem ser trocadas entre números adjacentes a partir da troca da grande mais. Portanto, o número total de comparação e troca de ter velocidade menos natural seria aumentado. Claro que, no pior caso, pode ainda ser o número dois adjacente foram trocadas. Então, o pior complexidade de tempo de classificação rápida e bubble sort é o mesmo é O (N2), a sua complexidade média de tempo de O (n log n).

Breve tipo:
#include <stdio.h>
int A [101], n-; // definir variáveis globais, estas variáveis requer o uso de duas sub-funções em
quicksort void (int esquerda, direita int) {
    int I, J, T, TEMP;
    IF (esquerda> direita)
        retorno;
    TEMP = a [esquerda]; // TEMP é armazenada no número de referência
    i = left;
    J = direito;
    o while (! I = J) {// ordem é importante, primeiro da direita para encontrar
        o tempo (a [J]> = TEMP && I <J)
            J ,;
        o tempo (a [I] <= TEMP && I <J) // encontrar o direito
            I ++;       
        IF (I < j) // lugares de troca nos dois números de matriz
        {
            T = uma [I];
            a [i] = uma [J];
            um [j] = T;
        }
    }
    // homing números de referência será, eventualmente,
    um [ esquerda] = uma [i];
    A [I] = TEMP;
    sort (esquerda ,. 1-I); // continuar o processamento da esquerda, existe um processo recursivo
    quick (i + 1, direita) ; // continuar a processar o mesmo, existe uma recursiva processo
}
int main () {
    int i;
    // dados de leitura
    Scanf ( "% D", e n-);
    for (i = 1;. I <= N-; i ++)
        Scanf ( "% D", & a [i]) ;
    sort (1, n.); // quick chamada
    após // classifica a saída
    for (i = 1;. eu <n-; i ++)
        a printf ( "% D", a [i]);
    printf ( "% D \ n-", A [n-]);
    retorno 0;
}
 

 

Publicado 43 artigos originais · ganhou elogios 28 · vê 40000 +

Acho que você gosta

Origin blog.csdn.net/u013380694/article/details/90169202
Recomendado
Clasificación