Escolar Documentos
Profissional Documentos
Cultura Documentos
MÉTODOS ORDENAÇÃO
LAGES
2010
Seleção
Ordenação por seleção é um algoritmo de ordenação baseado em se passar
sempre o menor valor do vetor para a primeira posição (ou o maior dependendo da
ordem requerida), depois o de segundo menor valor para a segunda posição, e assim é
feito sucessivamente com os (n-1) elementos restantes, até os últimos dois elementos.
Inserção
Ordenação por inserção é um simples algoritmo de ordenação, eficiente quando
aplicado a um 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.
QuickSort
ShellSort
ShellSort é o mais eficiente algoritmo de classificação dentre os de
complexidade quadrática. É um refinamento do método de inserção direta. O algoritmo
difere do método de inserção direta pelo fato de no lugar de considerar o array a ser
ordenado como um único segmento, ele considera vários segmentos sendo aplicado o
método de inserção direta em cada um deles. Basicamente o algoritmo passa várias
vezes pela lista dividindo o grupo maior em menores. Nos grupos menores é aplicado o
método da ordenação por inserção.
Tabela comparação tempo:
Para um vetor de dez mil itens gerado com valores randômicos entre zero e
cinquenta mil, os seguintes métodos de organização levaram certo tempo conforme a
tabela seguinte.
Conclusão
int vini[10000];
double t_selecao, t_insercao, t_shell, t_quick;
void quickSort( int[], int, int);
int dividir( int[], int, int);
if( l < r )
{
j = dividir( a, l, r);
quickSort( a, l, j-1);
quickSort( a, j+1, r);
}
while( 1)
{
do ++i; while( a[i] <= pivo && i <= r );
do --j; while( a[j] > pivo );
if( i >= j ) break;
t = a[i]; a[i] = a[j]; a[j] = t;
}
t = a[l]; a[l] = a[j]; a[j] = t;
return j;
}
x = v[i];
v[i] = v[min];
v[min] = x;
}
}
void shellsort(int * v, int n) {
int i , j , value;
int gap = 1;
do {
gap = 3*gap+1;
} while(gap < n);
do {
gap /= 3;
for(i = gap; i < n; i++) {
value =v[i];
j = i - gap;
while (j >= 0 && value < v[j]) {
v [j + gap] =v[j];
j -= gap;
}
v [j + gap] = value;
}
} while ( gap > 1);
}
void geravetor(){
int vet[10000];
int i,j;
for (int i=0; i<10000; i++){
vet[i] = rand () % 50000;
vini[i] = vet[i];
}
}
int main(){
int escolha=1;
while (escolha!=8){
printf("\n\n --------------------------- ");
printf("\n\n 4a.Fase / Joao Mota ");
printf("\n\n");
printf("\n 1 - Gerar Vetor ");
printf("\n 2 - Mostrar Vetor ");
printf("\n 3 - Ordenar Por Selecao ");
printf("\n 4 - Ordenar Por Insercao ");
printf("\n 5 - Ordenar Por ShellSort ");
printf("\n 6 - Ordenar Por QuickSort ");
printf("\n 7 - Tabela Tempo ");
printf("\n 8 - Fechar Programa ");
printf("\n\n Escolha uma opcao: ");
scanf("%d",&escolha);
switch (escolha) {
case 1:{
system("cls");
geravetor();
printf("\n\n Vetor Gerado com Sucesso! ");
break;
}
case 2:{
system("cls");
int i;
for (i = 0; i < 10000; i++){
printf("%d ", vini[i]);
}
break;
}
case 3:{
system("cls");
clock_t t0, tf;
int ordsele[10000];
int i;
for (i=0; i<10000; i++){
ordsele[i]=vini[i];
}
t0 = clock();
selecao(10000, ordsele);
tf = clock();
t_selecao = ((double)(tf-t0))/CLOCKS_PER_SEC;
for (i=0; i<10000; i++){
printf("%d ", ordsele[i]);
}
printf("\n\n Tempo gasto: %lf s\n", t_selecao);
break;
}
case 4:{
system("cls");
clock_t t0, tf;
int ordinse[10000];
int i;
for (i=0; i<10000; i++){
ordinse[i]=vini[i];
}
t0 = clock();
insercao(10000, ordinse);
tf = clock();
t_insercao = ((double)(tf-t0))/CLOCKS_PER_SEC;
for (i=0; i<10000; i++){
printf("%d ", ordinse[i]);
}
printf("\n\n Tempo gasto: %lf s\n", t_insercao);
break;
}
case 5:{
system("cls");
clock_t t0, tf;
int ordshell[10000];
int i;
for (i=0; i<10000; i++){
ordshell[i]=vini[i];
}
t0 = clock();
shellsort(ordshell, 10000);
tf = clock();
t_shell = ((double)(tf-t0))/CLOCKS_PER_SEC;
for (i=0; i<10000; i++){
printf("%d ",ordshell[i]);
}
printf("\n\n Tempo gasto: %lf s\n", t_shell);
break;
}
case 6:{
system("cls");
clock_t t0, tf;
int ordquick[10000];
int i;
for (i=0; i<10000; i++){
ordquick[i]=vini[i];
}
t0 = clock();
quickSort( ordquick, 0, 10000);
tf = clock();
t_quick = ((double)(tf-t0))/CLOCKS_PER_SEC;
for (i=0; i<10000; i++){
printf("%d ",ordquick[i]);
}
printf("\n\n Tempo gasto: %lf s\n", t_quick);
break;
}
case 7:{
system("cls");
printf("\n\n Tabela tempo gasto");
printf("\n\n Ordenacao - Tempo");
printf("\n\n");
printf("\n 1-Selecao - %lf s",t_selecao);
printf("\n 2-Insercao - %lf s",t_insercao);
printf("\n 3-ShellSort - %lf s",t_shell);
printf("\n 4-QuickSort - %lf s",t_quick);
break;
}
default:{
system("cls");
if( escolha==8){
continue;
}
printf("\n\n Nenhuma opcao foi escolhida ");
break;
}
}
}
if( escolha==8)
printf("\n\n O Programa foi fechado");
getch();