Skip to content
Snippets Groups Projects
Commit 41c6e763 authored by clm15@inf.ufpr.br's avatar clm15@inf.ufpr.br
Browse files

biblioteca busca

parent f7d5f107
No related branches found
No related tags found
No related merge requests found
busca.c 0 → 100644
#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);
}
}
busca.h 0 → 100644
#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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment