A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Algoritmo de Ordenação Colégio Batista Santos Dumont Olimpíada Brasileira de Informática Wladimir Araújo Tavares.

Apresentações semelhantes


Apresentação em tema: "Algoritmo de Ordenação Colégio Batista Santos Dumont Olimpíada Brasileira de Informática Wladimir Araújo Tavares."— Transcrição da apresentação:

1 Algoritmo de Ordenação Colégio Batista Santos Dumont Olimpíada Brasileira de Informática Wladimir Araújo Tavares

2 Ordenação por Seleção Idéia : Idéia : A ordenação por seleção, é baseado em se passar sempre o maior valor do vetor para a última posição (ou o menor dependendo da ordem requerida), depois o de segundo maior valor para a penúltima posição, e assim é feito sucessivamente com os (n-1) elementos restantes, até os últimos dois elementos.

3 Algoritmo Para i = n até 2 faça maior = 1 maior = 1 Para j = 2 até i faça Para j = 2 até i faça Se v[j] > v[maior] então Se v[j] > v[maior] então maior = i maior = i aux = v[i] aux = v[i] v[i] = v[maior] v[i] = v[maior] v[maior] = aux v[maior] = aux

4 Implementação em C for(i=n;i>=2;i++){ maior = 1; maior = 1; for(j=2;i<=i;i++){ for(j=2;i<=i;i++){ if(v[j] > v[maior]) if(v[j] > v[maior]) maior = j; maior = j; } aux = v[i]; aux = v[i]; v[i] = v[maior]; v[i] = v[maior]; v[maior]=aux; v[maior]=aux; }

5 Simulação Devemos encontrar o número que vai fica na posição 4. O maior do vetor de tamanho 4 está na posição 2. Então troca-se v[2] e v[4] Devemos encontrar o número que vai fica na posição 4. O maior do vetor de tamanho 4 está na posição 2. Então troca-se v[2] e v[4] Devemos encontrar o número que vai fica na posição 3. O maior do vetor de tamanho 3 está na posição 1. Então troca-se v[1] e v[3]

6 Devemos encontrar o número que vai fica na posição 2. O maior do vetor de tamanho 2 está na posição 1. Então troca-se v[1] e v[2]

7 Ordenação por Bolha Idéia : O ordenação por flutuação (literalmente "por bolha"), é um algoritmo de ordenação dos mais algoritmo de ordenaçãoalgoritmo de ordenação simples. A idéia é percorrer o vetor diversas vezes, vetor a cada passagem fazendo flutuar para o topo o maior elemento da sequência. Essa movimentação lembra a forma como as bolhas em um tanque de água tanque procuram seu próprio nível, e disso vem o nome do algoritmo.

8 Algoritmo Para i=1 ate n-1 faça troca = falso troca = falso Para j = 1 ate n-i faça Para j = 1 ate n-i faça Se v[j] > v[j+1] então Se v[j] > v[j+1] então aux = v[j] aux = v[j] v[j] = v[j+1] v[j] = v[j+1] v[j+1]=aux v[j+1]=aux troca = verdade troca = verdade Se troca = falso entao pare Se troca = falso entao pare

9 Implementação em C for(i=1;i<=n-1;i++){ troca = 0; troca = 0; for(j=1;j<=n-i;j++){ for(j=1;j<=n-i;j++){ if(v[j] > v[j+1]){ if(v[j] > v[j+1]){ aux = v[j]; aux = v[j]; v[j]=v[j+1]; v[j]=v[j+1]; v[j+1]=aux; v[j+1]=aux; troca=1; troca=1; } } if(troca==0) break; if(troca==0) break;}

10 Ordenação por Inserção Idéia: A ordenação por inserção é um simples algoritmo de ordenaçãoalgoritmo de ordenação, eficiente quando aplicado a um algoritmo de ordenação pequeno número de elementos. Em termos gerais, ele percorre um vetor de elementos da esquerda para a direita e à medida que avança vai deixando os elementos mais à esquerda ordenados. O algoritmo de inserção funciona da mesma maneira com que muitas pessoas ordenam cartas em um jogo de baralho como o pôquer.

11 Algoritmo Para i = 2 ate n faça x = v[i] x = v[i] j = i j = i Enquanto( v[j-1] > x E j > 1) faça Enquanto( v[j-1] > x E j > 1) faça v[j] = v[j-1] v[j] = v[j-1] j = j-1 j = j-1 v[j] = x v[j] = x

12 Simulação Para i = 2 temos x = 9 j=2 v[j-1] não é maior que x. v[j] = x Para i = 3 temos que x = 8 j = 3 v[j-1] é maior que x, logo v[j]=v[j-1] j = j-1 j=2 v[j-1] não é maior que x v[j] = x58967

13 Para i = 4 x = 6 j = 4 v[j-1] > x v[j] = v[j-1] j=3 v[j-1] > x v[j]=v[j-1]58897 j=2 v[j-1] > x é falso v[j] = x56897

14 Para i = 5 x = 7 j =5 v[j-1] > x v[j]=v[j-1] j=4 v[j-1] > x v[j]=v[j-1 ] j=3 v[j-1] < x v[j] = x56789

15 Implementação em C for(i=2;i<=n;i++){ x = v[i]; j = i; while(v[j-1] > x && j > 1){ v[j]=v[j-1]; v[j]=v[j-1]; j--; j--;}v[j]=x}

16 Ordenação utilizando qsort qsort é uma função de ordenação que pode ser utilizada nas provas da OBI. A assinatura da função é : void qsort ( void * base, size_t num, size_t size, int ( * compara ) ( const void *, const void * ) );

17 Parâmetros Parâmetros base é um ponteiro para o primeiro elemento do vetor que se deseja ordenar. base é um ponteiro para o primeiro elemento do vetor que se deseja ordenar. num é o número de elementos do vetor apontado pelo ponteiro base. num é o número de elementos do vetor apontado pelo ponteiro base. size número de bytes de cada elemento do vetor. size número de bytes de cada elemento do vetor. compara é uma função que compara os elementos do vetor.A função aceita como parâmetro dois ponteiros para elementos do vetor do tipo void*. compara é uma função que compara os elementos do vetor.A função aceita como parâmetro dois ponteiros para elementos do vetor do tipo void*.

18 O valor de retorno da função será: negativo, se o elem1 menor que elem2 negativo, se o elem1 menor que elem2 Zero, se o elem1 igual a elem2 Zero, se o elem1 igual a elem2 Positivo, se o elem1 maior que elem2 Positivo, se o elem1 maior que elem2

19 /* qsort example */ #include /* qsort example */ #include #include #include int values[] = { 40, 10, 100, 90, 20, 25 }; int compare (const void * a, const void * b){ return ( *(int*)a - *(int*)b ); } int main () { int * pItem; int * pItem; int n; int n; qsort (values, 6, sizeof(int), compare); qsort (values, 6, sizeof(int), compare); for (n=0; n<6; n++) for (n=0; n<6; n++) printf ("%d ",values[n]); printf ("%d ",values[n]); return 0; return 0;}

20 Vamos supor que no nosso problema temos um Dado composto. Por exemplo, um aluno que tem um código e uma nota. Queremos ordenar utilizando o qsort. Mas se utilizarmos dois vetores Não vai funcionar! Exemplo: #define MAX_ALUNOS 100 int codigo[MAX_ALUNOS]; int nota[MAX_ALUNOS];

21 Se utilizarmos o qsort com o vetor o código teremos um problema.Por exemplo, codigo[1] terá o código de um aluno e nota[1] será a nota de um outro aluno. Teremos que juntar essas duas informações em uma variável. #define MAX_ALUNOS 100 struct aluno{ int codigo, nota; int codigo, nota;}alunos[MAX_ALUNOS];

22 Quando ordenamos o vetor aluno não vamos mais separar informações. Vamos usar o qsort: Seja n a quantidade de alunos qsort(alunos,n,sizeof(alunos[0]),compara). Vamos ordenar por código: int compara(const void *a, const void *b){ struct aluno alunoa = *(*aluno)a; struct aluno alunob = *(*aluno)b; return alunoa.codigo – alunob.codigo; }

23 Localização de um depósito Vamos supor que exista uma rede de lanchonete em uma rede. Devemos escolher uma das lanchonetes para instalar um depósito de tal forma que o somatório das distâncias para todas as outras lanchonetes seja minimizado? Solução : Mediana


Carregar ppt "Algoritmo de Ordenação Colégio Batista Santos Dumont Olimpíada Brasileira de Informática Wladimir Araújo Tavares."

Apresentações semelhantes


Anúncios Google