Está en la página 1de 3

Exercícios – Pesquisa e Ordenação de Arrays

A - Mecanismos de pesquisa em Arrays (Vectores e Matrizes)

I. Pesquisa Linear

Dado um vector (array a[0...n-1]), pretende-se saber se um determinado valor X é um dos seu elementos.
Exemplo: int vector [ ] = {10,9,45,6,20,7,3,220; X=25.

1. Elabore um função Pesquisa (), em C, que permita calcular quantas vezes é que a comparação X
== vector[ i ] é executada?

2. Quando o valor X existe repetido no vector, exemplo: int vector2 [ ] = {10,20, 9,6,20,7,3,20};
a) Indicar a posição da primeira ocorrência;
b) Indicar a posição da última ocorrência;

II. Pesquisa linear num vector ordenado

Exemplo:

3. Elabore uma função em C que permita verificar se determinado valor X, dado pelo utilizador
consta do vector ou não?

III. Pesquisa binária num vector ordenado

A pesquisa binária é um método mais avançado de busca, executada da seguinte forma:


A primeira busca é feita no meio do vector.
Caso o valor (elemento) procurado seja maior que o valor central do vector,
A nova pesquisa será feita somente da metade para a frente do vector.
Caso contrário, da metade para trás.
Se o valor (elemento) central for o procurado, a pesquisa termina por aí.

Considere o seguinte vector:

4. Elabore uma função em C para procurar o valor X = 35, neste vector?

5. Quantas vezes é que a comparação X == vector[ i ] é executada?

6. Deverá refazer este exercício, pedindo ao utilizador os valores a carregar no array, pela ordem
que este indicar e proceder de seguida à sua ordenação. Utilize para tal uma das funções
desenvolvidas na secção seguinte (B – Métodos de Ordenação de Arrays).

B – Métodos de Ordenação de Arrays (Vectores e Matrizes)

IV. Inserção (Insertion Sort)

Objectivo: Neste método percorre-se o vector sequencialmente a partir do segundo elemento e inserem-se
os elementos na posição correcta em relação aos elementos já ordenados, isto é, considerando um sub-
vector ordenado a partir do inicio aonde se vai acrescentando mais um elemento até chegar ao fim do
vector. Para inserir um elemento na sua posição correcta deslocam-se os elementos que são maiores do
que ele.
Para i = 1 até dimensão

UAL – IP1 (2004) 1/3


Exercícios – Pesquisa e Ordenação de Arrays

Faz
elemento = numeros[ i ]
j=i
Enquanto ((j > 0) e (numeros[ j - 1] > elemento))
Faz
numeros[ j ] = numeros[ j - 1]
j=j-1
Fimfaz
numeros[ j ] = elemento
Fimfaz

7. Elabore uma função em C denominada insercaoSort() que ordena um vector de inteiros.

V. Selecção (Selection Sort)

Objectivo: Este método consiste em encontrar repetidamente o menor elemento e colocá-lo na sua devida
posição percorrendo o vector a partir dos elementos ainda não ordenados. Selecciona-se o elemento de
menor valor e troca-se pelo primeiro. Faz-se o mesmo com os elementos restantes, executando-se o
processo tantas vezes quanto o número de elementos no vector menos um.

Para i = 0 até i < dimensão - 1


faz
min = i
Para j = i + 1 até j < dimensão
faz
se (vector[ j ] < vector[ min ]) então
min = j
fimse
fimfaz
temp = vector[ i ]
vector[ i ] = vector[ min ]
vector[ min ] = temp
fimfaz

8. Elabore uma função em C denominada seleccaoSort() que ordena um vector de inteiros.

VI. Bolha (Bubble Sort)

Objectivo: A ideia básica do Bubble Sort é percorrer o vector sequencialmente várias vezes. Em cada
passagem deve comparar cada elemento com o seu sucessor e se os elementos não estão ordenados deve
trocá-los de posição.

Nota: Existem outras formas de trabalhar com arrays multidimencionais em C (“objectos”) bem como outros
métodos de pesquisa e de ordenação de vectores e matrizes, mas esses ficam para mais tarde (em
C#).

/* Exemplo - ordenar nomes num array estático de Uma dimensão utiliza o método de ordenação da
bolha ("Bubble Sort") */
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>

/*-----------prototipo das funcoes (declaração)-------------*/


void ordena_array(void);
void imprime_array(char);
void trocar(char *, char *);

/*----------------------variaveis globais ----------------------*/


const int COL = 10;
const int LIN = 10;

UAL – IP1 (2004) 2/3


Exercícios – Pesquisa e Ordenação de Arrays

char a[LIN][COL] = {"laranja", "uva", "pessego", "ameixa", "pera", "cereja",


"banana", "limao", "tanjerina", "meloa"};
char b[50] = "asdfasdf asdf asdfsdf asdf asdasdf asdf";
/*-------------------------------------------------------------*/
void main()
{
system(“CLS”);
imprime_array('1');
ordena_array();
imprime_array('2');
char *s1 = "maria"; char *s2 = "gabriela";

printf(“\nResultado da comparação (strcmp) de s1 e s2: %d “, strcmp(s1,s1));

char *p = strtok(b," ");


while (p)
{
p = strtok(NULL, " ");
printf("\n char : %c, pos %p", *p, p);
}
getch();
}
/*-------------------------------------------------------------------*/
void ordena_array(void)
{
int k, i; int resultado;
char *s1, *s2;
for (k = 0; k < LIN; k++) /*controla ciclo de todas as passagens */
{
for (i = 0; i < (LIN-k-1); i++) /*controla uma passagem de comparacao */
{
s1 = a[i]; s2 = a[i+1];
resultado = strcmp(s1, s2);
if (resultado > 0) /*termina nos elementos ja ordenados*/
trocar(a[i], a[i+1]); }
}
}
/*----------------------------------------------------------------------*/
void trocar(char *primeiro, char *segundo) /*troca primeiro pelo segundo*/
{
char temp[COL];
strcpy(temp,segundo);
strcpy(segundo, primeiro);
strcpy(primeiro,temp);
}
/*--------------------------------------------------------------------*/
void imprime_array(char vez)
{
if (vez == '1')
printf("\n\nconteudo do array ANTES de ser ordenado: \n");
else
printf("\n\nconteudo do array DEPOIS de ser ordenado: \n");

for (int j=0; j < LIN; j++)


{
if (!(j % 4))
printf("\n");
printf("%s ", a[j]);
}
}
/*------------------------------------------------------------------*/

UAL – IP1 (2004) 3/3

También podría gustarte