From 41c6e763f4219b7c3ba6288a404a24fa840ded5f Mon Sep 17 00:00:00 2001 From: CRISTOPHER LUIS MATTOSO <clm15@inf.ufpr.br> Date: Fri, 4 Dec 2015 14:13:16 -0200 Subject: [PATCH] biblioteca busca --- busca.c | 126 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ busca.h | 15 +++++++ 2 files changed, 141 insertions(+) create mode 100644 busca.c create mode 100644 busca.h diff --git a/busca.c b/busca.c new file mode 100644 index 0000000..7c7dd9b --- /dev/null +++ b/busca.c @@ -0,0 +1,126 @@ +#include "busca.h" + +int pesqseq (int *vet, int elem, int N) +{ + int i; + vet[0] = elem; + for (i = N; vet[i] != elem; i--); + return i; +} + +int pesqbin (int *vet, int elem, int N) +{ + int esq = 1, dir = N; + int meio = (esq+dir)/2; + do + { + if(vet[meio] == elem) + return meio; + else if (vet[meio] > elem) + dir = meio - 1; + else + esq = meio + 1; + meio = (esq + dir)/2; + } while (esq < dir); + return 0; +} + +void menor (int *vet, int *pos, int N) +{ + int i, aux = vet[*pos]; + for (i = *pos + 1; i <= N; i++) + if (vet[i] < aux) + { + aux = vet[i]; + *pos = i; + } +} + +void SelectSort (int *vet, int N) +{ + int i, aux, k; + for (i = 1; i <= N; i++) + { + k = i; + menor (vet, &k, N); + aux = vet[i]; + vet[i] = vet[k]; + vet[k] = aux; + } +} + +void BubbleSort (int *vet, int N) +{ + int i, j, aux; + for (i = 2; i <= N; i++) + for (j = N; j >= i; j--) + if (vet[j] < vet[j-1]) + { + aux = vet[j]; + vet[j] = vet[j-1]; + vet[j-1] = aux; + } +} + +int mediana (int *vet, int esq, int dir) +{ + int med = (esq+dir)/2; + if (vet[esq] <= vet[dir]) + { + if (vet[esq] <= vet[med]) //descobrimos se esq é o menor elemento ou não + { + if (vet[med] <= vet[dir]) //se esq é menor elemento, o segundo menor é mediana + return med; + else + return dir; + } + else //se esq não é menor elemento, ele é mediana + return esq; + } + else //ja sabemos que esq não é menor elemento, tentamos dir + { + if (vet[dir] <= vet[med]) + { + if (vet[med] <= vet[esq]) + return med; + else + return esq; + } + else + return dir; + } +} + +void Particao (int *vet, int esq, int dir, int *pos_pivo) +{ + int i, j, aux, pivo, med = mediana(vet, esq, dir); + i = esq; + j = dir; + while (i < j) + { + while ((vet[i] <= pivo)&&(i < dir)) + i++; + while (vet[j] > pivo) + j--; + if (i < j) + { + aux = vet[i]; + vet[i] = vet[j]; + vet[j] = aux; + } + } + vet[esq] = vet[j]; + vet[j] = pivo; + *pos_pivo = j; +} + +void QuickSort (int *vet, int esq, int dir) +{ + int pos_pivo; + if (esq < dir) + { + Particao(vet, esq, dir, &pos_pivo); + QuickSort(vet, esq, pos_pivo - 1); + QuickSort(vet, pos_pivo + 1, dir); + } +} diff --git a/busca.h b/busca.h new file mode 100644 index 0000000..7231fd4 --- /dev/null +++ b/busca.h @@ -0,0 +1,15 @@ +#ifndef BUSCA_H +#define BUSCA_H + +#include <stdio.h> + +int pesqseq (int *, int , int ); +int pesqbin (int *, int , int ); +void menor (int *, int *, int ); +void SelectSort (int *, int ); +void BubbleSort (int *, int ); +int mediana (int *, int , int ); +void Particao (int *, int , int , int *); +void QuickSort (int *, int, int); + +#endif -- GitLab