Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Luthien

shellsort, sobre o valor de h

Recommended Posts

Um algoritmo de shellsort opera como algoritmo de inserção quando h = 1, mas ele não é estável. Tenho q provar isso com exemplos mas estou com duvidas

void Shellsort(TipoItem A[], int n){
    int h = 1, i j;
    TipoItem x;
    do{
        h = h*3+1;
    }while(h<n);
    do{
        h = h/3;
        for(i = h+1; i <=n;i++){
            x = A[i];
            j = i;
            while(A[j-h].chave > x.chave){
                A[j] = A[j - h];
                j = j - h;
                if(j<=h)
                    break;
            }
            A[j] = x;
        }
    }while(h != 1);
}
    }

se eu quiser ordenar a palavra PERIODO, tenho q n = 7, meu h vai ser 13 e ao dividi-lo por 3, será 4 mas na próxima vez em q eu for dividir será 1 e eu entro no laço pela ultima vez, certo? Mas vi alguns exemplos na internet q o h vai de 4 para 2 e dps para 1. Onde estou errando? :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

O "h" pode receber qualquer valor. Foi comprovado que com os valores obtidos pela fórmula "3h+1", resultam na melhor eficiencia do algorítimo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.