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