objetos em uma ordem ascendente ou descendente Objetivo: Facilitar a posterior recuperao de itens no conjunto ordenado A maioria dos mtodos de ordenao baseada em comparaes das chaves Interna: Todo o conjunto a ser ordenado pode ser alocado na memria interna do computador Externa: Envolve arquivos compostos por um nmero de registros que maior do que a memria interna do computador pode armazenar Ordenao Fatores crticos nos mtodos de ordenao: Eficincia nmero de comparaes nmero de trocas Memria extra utilizada nenhuma - ordenam na prpria estrutura usam listas de ponteiros usam cpia da estrutura a ser ordenada Caracterstica importante: estabilidade Ordenao Um mtodo estvel se preserva a ordem relativa de chaves iguais de um arquivo Exemplo: reordenao da lista alfabtica de funcionrios pelo campo salrio: um mtodo estvel produzir uma lista na qual os funcionrios com mesmo salrio aparecero em ordem alfabtica Mtodos Simples Bubblesort (mtodo da bolha) Bubblesort (mtodo da bolha) Seleo Insero Mtodos Eficientes Shellsort Quicksort Heapsort Ordenao BubbleSort original void BubbleSort(int A[], int n) { int i, j, temp; for(i=0;i<n-1;i++) { for(j=0;j<n-1;j++) { if(A[j] > A[j+1]) { temp = A[j]; temp = A[j]; A[j] = A[j+1]; A[j+1] = temp; } } } } Ordenao BubbleSort adap. 1 void BubbleSort(int A[], int n) { int i, temp, flag=0; while(flag==0) { flag = 1; for(i=0;i<n-1;i++) { if(A[i] > A[i+1]) {{ temp = A[i]; A[i] = A[i+1]; A[i+1] = temp; flag=0; } } } } Ordenao BubbleSort adap. 2 void BubbleSort(int A[], int n) { int i, j, temp, cont; cont = n-1; for(i=0;i<n-1;i++) { for(j=0;j<cont;j++) { if(A[j] > A[j+1]) {{ temp = A[j]; A[j] = A[j+1]; A[j+1] = temp; } } cont--; } } Ordenao - Seleo Funcionamento Selecione o menor item do vetor Troque-o com o item que est na primeira posio do vetor primeira posio do vetor Repita a operao anterior para os n-1 itens restantes, depois para os n-2, at que reste apenas um elemento Ordenao - Seleo void selecao (int A[], int n) { int i, j, min, aux; for (i=0 ; i < n-1; i++) { min = i; for (j= i+1; j < n; j++) if (A[j] < A[min]) min = j; min = j; aux = A[min]; A[min] = A[i]; A[i] = aux; } } Ordenao - Seleo Vantagens: simples Pequeno nmero de movimentao de registros Indicado para arquivos com registros grandes grandes Desvantagens: Custo quadrtico No estvel No sensvel ordenao inicial Indicado para arquivos pequenos Ordenao - Insero Funcionamento: similar ao utilizado para organizar cartas de baralho em cada passo, a partir de i= 2, o i-simo item da seqncia fonte transferido para seu lugar transferido para seu lugar apropriado Ordenao - Insero void Insercao (int A[], int n) { int i, j, v; for (i= 1; i < n; i++){ v = A[i]; j= i; while (j>0 && A[j-1] > v) { A[j] = A[j-1]; j--; }} A[j] = v; } } Ordenao - Insero Vantagens: simples estvel O tempo linear quando o arquivo j est ordenado Indicado quando se deseja acrescentar poucos itens a um arquivo j ordenado Desvantagens: Custo quadrtico Grande nmero de movimentao de registros