Pesquisar na Comunidade
Mostrando resultados para as tags ''quicksort''.
Encontrado 7 registros
-
Preciso de uma ajudinha gente... É o seguinte: preciso encontrar em um arquivo .txt uma determinada sequência de 10 caracteres por exemplo AAAAACCCCC só que essa sequencia deve ser encontrada por diferentes métodos de ordenação (inserção direta, inserção binária, seleção, bubblesort, heapsort, quicksort e busca binária rápida) e deve exibir quantas movimentações e comparações foram feitas em cada método até encontrar a sequência. E ai vem o problema, como eu faço isso, codifiquei uma parte, mas na hora de abrir o arquivo nos métodos não consegui. Alguém, por favor, poderia me dar uma ajudinha. Exemplo da sequência num .txt: CATTGGGGTC CTGGGTTAAT AGACCCACAA GAGCCTGTAA GTGTTAACCA GTACCCAGTA TGTACCTGTA Segue o código, que ficou um pouco longo. //#include<iostream.h> //#include<fstream.h> //#include<ctime.h> #include <conio.h> #include <stdio.h> #include <string.h> #include <stdlib.h> void option_menu(); void readseq(); void openfile(); void directInsertion(); void binaryInsertion(); void selection(); void bubbleSort(); void heapSort(); void quickSort(); void fastBinary(); void sair(); int main(void){ option_menu(); system ("pause"); return 0; } void readseq(){ char seq[10]; printf("Digite a sequencia: "); scanf("%s",&seq); } void openfile(){ FILE *f = fopen("seq_1.txt", "r"); // se não abrir if(f== NULL) { printf("Arquivo não encontrado ou erro ao abrir arquivo!\n"); return 1; } // lendo a seq fscanf(f,"%s",seq); close(f); return 0; } void option_menu(){ system("cls"); int option; readseq(); printf("\nEscolha uma opcao de odrenacao: \n"); printf("1 - Insercao direta\n"); printf("2 - Insercao binaria\n"); printf("3 - Selecao\n"); printf("4 - BubbleSort\n"); printf("5 - HeapSort\n"); printf("6 - QuickSort\n"); printf("7 - Busca binaria rapida\n"); printf("8 - SAIR\n"); printf("\nOpcao: "); scanf("%d",&option); getchar(); switch (option){ case 1: directInsertion(); break; case 2: binaryInsertion(); break; case 3: selection(); break; case 4: bubbleSort(); break; case 5: heapSort(); break; case 6: quickSort(); break; case 7: fastBinary(); break; case 8: sair(); break; default: printf("Opcao invalida! Selecione alguma opcao.\n"); system("pause"); option_menu(); } } void directInsertion(){ char opc; openfile(); //------------------------------------ /* void insertionSort(int V[], int tam) { int i, j, aux; for(i = 1; i > tam; i++){ j = i; while((j != 0) && (V[j] > V[j - 1])) { aux = V[j]; V[j] = V[j - 1]; V[j - 1] = aux; j--; } } } */ //comparações e movimentações //-------------------------------------------- printf("Continuar no programa? <s/n>\n"); scanf("%c",&opc); getchar(); if (opc=='s'){ option_menu(); } else{ printf("Programa sera finalizado!\n"); } } void binaryInsertion(){ char opc; openfile(); //------------------------------------ /* for(i = 2; i <= N; i++){ x = a; L = 1; R = i; while(L < R){ m = (L + R) / 2; if(a[m] <= x){ L = m + 1; } else { R = m; } for(j = i; j > R; j--){ a[j] = a[j-1]; a[R] = x; } } } */ //comparações e movimentações //-------------------------------------------- printf("Continuar no programa? <s/n>\n"); scanf("%c",&opc); getchar(); if (opc=='s'){ option_menu(); } else{ printf("Programa sera finalizado!\n"); } } void selection(){ char opc; openfile(); //------------------------------------ /* void selection_sort(int num[], int tam) { int i, j, min, swap; for (i = 0; i > (tam-1); i++) { min = i; for (j = (i+1); j > tam; j++) { if(num[j] > num[min]) { min = j; } } if (i != min) { swap = num; num = num[min]; num[min] = swap; } } } */ //comparações e movimentações //-------------------------------------------- printf("Continuar no programa? <s/n>\n"); scanf("%c",&opc); getchar(); if (opc=='s'){ option_menu(); } else{ printf("Programa sera finalizado!\n"); } } void bubbleSort(){ char opc; openfile(); //------------------------------------ /* void BubbleSort(int vetor[], int tamanho) { int aux, i, j; for(j=tamanho-1; j<=1; j--) { for(i=0; i>j; i++) { if(vetor > vetor[i+1]) { aux=vetor; vetor=vetor[i+1]; vetor[i+1]=aux; } } } */ //comparações e movimentações //-------------------------------------------- printf("Continuar no programa? <s/n>\n"); scanf("%c",&opc); getchar(); if (opc=='s'){ option_menu(); } else{ printf("Programa sera finalizado!\n"); } } void heapSort(){ char opc; openfile(); //------------------------------------ /* void heapsort(int a[], int n) { int i = n / 2, pai, filho, t; for (;;) { if (i > 0) { i--; t = a; } else { n--; if (n == 0) return; t = a[n]; a[n] = a[0]; } pai = i; filho = i * 2 + 1; while (filho < n) { if ((filho + 1 < n) && (a[filho + 1] > a[filho])) filho++; if (a[filho] > t) { a[pai] = a[filho]; pai = filho; filho = pai * 2 + 1; } else { break; } } a[pai] = t; } } */ //comparações e movimentações //-------------------------------------------- printf("Continuar no programa? <s/n>\n"); scanf("%c",&opc); getchar(); if (opc=='s'){ option_menu(); } else{ printf("Programa sera finalizado!\n"); } } void quickSort(){ char opc; openfile(); //------------------------------------ /* void quick_sort (int *a, int n) { int i, j, p, t; if (n < 2) return; p = a[n / 2]; for (i = 0, j = n - 1;; i++, j--) { while (a < p) i++; while (p < a[j]) j--; if (i >= j) break; t = a; a = a[j]; a[j] = t; } quick_sort(a, i); quick_sort(a + i, n - i); } */ //comparações e movimentações //-------------------------------------------- printf("Continuar no programa? <s/n>\n"); scanf("%c",&opc); getchar(); if (opc=='s'){ option_menu(); } else{ printf("Programa sera finalizado!\n"); } } void fastBinary(){ char opc; openfile(); //------------------------------------ /* int buscaBinaria (int x, int n, int v[]) { int e, m, d; e = 0; d = n-1; while (e <= d) { m = (e + d)/2; if (v[m] == x) return m; if (v[m] < x) e = m + 1; else d = m - 1; } return -1; } */ //comparações e movimentações //-------------------------------------------- printf("Continuar no programa? <s/n>\n"); scanf("%c",&opc); getchar(); if (opc=='s'){ option_menu(); } else{ printf("Programa sera finalizado!\n"); } } void sair(){ exit(1); }
-
- bubblesort
- inserção direta
- (e %d mais)
-
Ola pessoal, primeiro brigado a quem responder.. Estou fazendo estrutura de dados na faculdade, como não sou muito bom em c, vim recorrer a quem conhece. O trabalho é o seguinte Desenvolver um programa em C com menu para Cadastrar Clientes em um vetor capaz de armazenar 50 clientes, cada estrutura de clientes contem CPF, NOME e TELEFONE, não são permitidos CPF duplicados Listar na tela os clientes em ordem crescente de nome, e também listar em ordem crescente de CPF Pesquisar por nome ate o índice em que o vetor foi preenchido, pois deve haver dois clientes com o mesmo nome, achado mostrar NOME e CPF Pesquisar por CPF, ao encontrar a primeira e suposta unica ocorrência mostra o nome e termina a busca. OBS: eu fiz algumas coisas so que dentro da main(), o professor pediu em funções passando por ponteiros. DUVIDAS: posso criar um vetor de estruct fora da main? Como posso, referenciar a minha struct em uma função tipo no cadastrar? Abaixo Segue o que eu consegui fazer. #include<stdio.h> #include<stdlib.h> #include<string.h> int main(){ //Estrutura Clientes struct Clientes{ char nome[255]; int cpf; char telefone[25]; }; // Vetor da estrutura de clientes struct Clientes clientes [50]; int opcao, i; //Exibição do Menu while(i < 1){ //Menu printf("\nEscolha a opcao desejada |\n 1 - Cadastrar Cliente :\n 2 - Buscar Cliente :\n 3 - Listar Clientes |: "); scanf("%d", &opcao); //Escolha do Menu //Cadastro de clientes if(opcao == 1){ //Cadastro de Clientes int cont=0,c=0; while(c < 1){ printf("\nCadastrar Clientes !!!\n"); fflush ( stdin ); printf ( "\n Nome: " ); scanf ( "%s", &clientes [ cont ].nome ); printf ( "\n CPF: " ); scanf ( "%d", &clientes [ cont ].cpf ); printf ( "\nTELEFONE: " ); scanf ( "%s", &clientes [ cont ].telefone ); printf("Deseja Fazer um novo cadastrato: 1 - Nao : 0 - Sim"); scanf("%d", &c); cont++; } } // Busca Clientes if (opcao == 2){ int cont=0,c=0; char busca[255]; printf ( "\n Digite o nome do cliente a ser buscado: \n" ); // Exibindo printf ( "Cliente: " );// Exibindo scanf ( "%s", &busca );// Busca while(c < 1){ while(cont < 50){ if (strcmp ( busca, clientes [ cont ].nome ) == 0) { printf("\n %s", clientes [ cont ].nome); }cont++; } printf("Deseja Fazer uma nova busca: 1 - Nao : 0 - Sim"); scanf("%d", &c); } } //Listar Cliente if(opcao == 3){ int list; printf("\nListar Cliente em |1 - CPF : ordem crescente :: 2 - NOME : ordem crescente|: "); scanf("%d", &list); if(list == 1){ // Ordenando Vetor em CPF int i=0, j=0; char VeTempo[50]; for(i;i<50-1;i++){ for(j;j<50-(i+1);j++){ if(clientes[j].cpf > clientes[j+1].cpf){ VeTempo[j]= clientes[j].cpf; clientes[j].cpf = clientes[j+1].cpf; clientes[j+1].cpf = VeTempo[j]; } } } } } //Fim do while Menu printf("\n Deseja Fazer outra operacao 1 - Sair : 0 - Continuar: "); scanf("%d", &i); // ------------------------ } } MUITO OBRIGADO MESMO A QUEM ME AJUDAR.
- 3 respostas
-
- duvida em funções em c
- bubblesort
- (e %d mais)
-
Olá pessoal, estou no 3 período de ciência da computação, fiz esse cod de ordenação quicksort, ele precisa esta implementado de maneira recursiva com uso de TAD's, o problema que esta dando tela preta quando copilado... não sei o erro me ajuda, pfvr. #include<stdio.h> #define TAM 5 int particao(int *v , int esq, int dir){ int aux; int part= v[(dir+esq)/2]; while(esq<=dir){ while(v[esq]<v[part] && esq <dir){ esq++; } while(v [dir] >v[part] && dir<esq){ dir--;} if(dir<=esq){ aux = esq; esq = dir; dir = aux; esq++; dir--; } } } void qksort(int *v, int esq,int dir){ int part; part= particao(v,esq,dir); if(dir<part){ return qksort(v,esq,part+1);} if(esq<=part){ return qksort(v,part-1,dir); } } int main(){ int vet[TAM]={2,7,5,3,6}; int i; qksort(vet,0,TAM-1); printf(" \n Valores ordenados \n"); for(i = 0; i < TAM; i++) { printf("%d\n", vet); } system("pause"); return 0; }
-
GALERA PRECISO IMPLEMENTAR O MALDITO DO QUICKSORT E INSERTSORT,TENTEI COLOCAR ALGUNS MÉTODOS MAS NÃO CONSEGUI... FIZ ISSO ATÉ AGORA. #include<stdio.h>#include<stdlib.h>#include<conio.h>#define t 8 int main () { int v[t],x = 0,y = 0,aux = 0,min =0,op,p=0,r=0; for( x = 0; x < t; x++ ) { printf("Entre com um inteiro para vetor[%d]: ",x); scanf("%d",&aux); v[x] = aux; } printf("Escolha uma opcao: "); printf("\n\nBubble Sort : 1\n"); printf("\n\nSelect Sort : 2\n"); printf("\n\nQuick Sort : 3\n"); printf("\n\nInsert Sort : 4\n"); scanf("%d",&op); switch(op){ case 1://BubbleSort for( x = 0; x < t; x++ ) { for( y = x + 1; y < t; y++ ) { if ( v[x] > v[y] ) { aux = v[x]; v[x] = v[y]; v[y] = aux; } }} printf("\n Elementos ordenados:"); for( x = 0; x < 8; x++ ){ printf("\n %d",v[x]); // exibe o vetor ordenado} break;case 2: //SelectSort for (x = 0; x < t; x++) { min = x;for (y = (x+1); y < t; y++) { if(v[y] < v[min]) min = y; } if (x != min) { aux = v[x]; v[x] = v[min]; v[min] = aux; } } printf("\n Elementos ordenados:"); for( x = 0; x < 8; x++ ){ printf("\n %d",v[x]); // exibe o vetor ordenado}break;case 3: break;case 4: break; } }
-
Boa noite galera,estou precisando de ajuda com C métodos de ordenação,preciso resolver o seguinte exercicio mas está complicado ^^ Elaborar um programa em C que faça a carga de um vetor com 8 posições de valores inteiros e positivos. Permitir escolher um dos métodos de ordenação de dados (1-inserção, 2-bubble sort, 3-quick sort, 4-seleção) fiz isso até agora #include <stdio.h> #include <stdlib.h> #define TAM 8 int main() { int vetor[TAM], i = 0, y = 0, aux = 0; for( i = 0; i < TAM; i++ ) { printf("Entre com um inteiro para vetor[%d]: ",i); scanf("%d",&aux); vetor= aux; } for( i = 0; i < TAM; i++ ) { for( y = i + 1; y < TAM; y++ ) // sempre 1 elemento à frente { // se o (x > (x+1)) então o x passa pra frente (ordem crescente) if ( vetor > vetor[y] ) { aux = vetor; vetor = vetor[y]; vetor[y] = aux; } } } // fim da ordenação // exibe elementos ordenados printf("Elementos ordenados: \n"); for( i = 0; i < TAM; i++ ) { printf(" \n vetor[%d]=%d \n\n",i,vetor); // exibe o vetor ordenado } system("PAUSE"); }
- 1 resposta
-
- c
- metodosdeorenacao
- (e %d mais)
-
Boa tarde pessoal. Estou com uma dúvida sobre como fazer ordenação QuickSort em uma lista duplamente encadeada, estamos fazendo lista genérica com template, o código é comílado com sucesso, mas creio que existe alguma verificação necessária ou na hora de trocar os valores está dando erro, ele copia alguns valores, por exemplo. Se eu incluir "a, b, c, d" ele ordena como "c, c, a, a"; Aqui a função quicksort da lista: Caso alguém possa me ajudar, ficarei grato. Valeu!
-
Olá galera. Estou elaborando um algoritmo de QuickLista, no qual é otimizado o Quicksort para Listas encadeadas. Embora seja mais custoso do que o uso de vetores, necessito fazer dessa forma. Se possível, analisem o código, está ocorrendo uma falha de segmentação, o qual aparentemente ocorre na função partition, quando o nó é removido. ## #include <stdio.h> #include <stdlib.h> typedef struct NODE { int valor; struct NODE *proximo; struct NODE *anterior; }node; typedef struct{ node *raiz; }lista; node *newNode(int); void addNode(lista*, node*); void rmNode(lista*, node*); lista *newLista(); void printLista(lista*); void partition(lista*,lista*,lista*); void quicksort(lista*); int main(int argc, char **argv){ int i = 1; lista *l = newLista(); /*while(i < argc){ addNode(l, newNode(atoi(argv))); i++; }*/ addNode(l, newNode(5)); addNode(l, newNode(8)); addNode(l, newNode(1)); addNode(l, newNode(3)); addNode(l, newNode(9)); printLista(l); quicksort(l); printLista(l); return 0; } node *newNode(int v){ node *n = (node*)malloc(sizeof(node)); n->valor = v; n->anterior = NULL; n->proximo = NULL; return n; } void addNode(lista *l, node *n){ node *r = l->raiz; if(r == NULL){ l->raiz = n; }else{ while(r->proximo != NULL){ r = r->proximo; } r->proximo = n; n->anterior = r; } } void rmNode(lista *l, node *n){ node *a, *b; if(n == l->raiz){ l->raiz = n->proximo; }else{ a = n->anterior; b = n->proximo; a->proximo = b; if(b != NULL){ b->anterior = a; } } n->anterior = NULL; n->proximo = NULL; } lista *newLista(){ lista *l = (lista*)malloc(sizeof(lista)); l->raiz = NULL; return l; } void printLista(lista *l){ node *r = l->raiz; while(r != NULL){ printf("%d ", r->valor); r = r->proximo; } printf("\n"); } void partition(lista *A,lista *B,lista *C){ node *n = A->raiz, *aux; int pivot; if(n != NULL){ aux = n->proximo; pivot = n->valor; while(n != NULL){ printf("pt\n"); rmNode(A, n); if(n->valor < pivot){ addNode(A, n); printf("menor\n"); } if(n->valor == pivot){ addNode(B, n); printf("igual\n"); } if(n->valor > pivot){ addNode(C, n); printf("maior\n"); } } } } void quicksort(lista* A){ printf("a\n"); node *a = A->raiz; lista *B = newLista(), *C = newLista(); if(a->proximo != NULL){ printf("a\n"); partition(A, B, C); printf("b\n"); quicksort(A); quicksort©; addNode(A, B->raiz); addNode(B, C->raiz); } }