Ajude nosso projeto a se manter online.

Como achar o Maior e o Menor elemento de um Array

Neste tutorial, vamos fazer um exercício interessante, que envolve arrays e busca. Vamos gerar um array de 1 milhão elementos, com valores aleatórios, e vamos fazer a máquina fazer uma varredura nesse array gigante, em busca do maior e do menor elemento do vetor.

Fazendo buscas em Arrays

Primeiro, definimos o tamanho de nosso array, que será SIZE, será uma constante de valor 1 milhão.
Em seguida, basta declarar nosso array, de nome 'numb': numb[SIZE];

Vamos declarar uma variável auxiliar, a 'count', e outras duas que vão armazenar o valor do maior (highest) e menor valor contido naquele array (lowest).

Vamos primeiro sair em busca do maior elemento.
A lógica é a seguinte: de início, vamos supor que o primeiro elemento do array, o de índice 0, seja o maior. Então, fazemos:
highest = numb[0];

O que temos que fazer é percorrer, todo o array, a partir do índice 1 e comparar todos os outros elementos com o valor armazenado em 'highest'.

Vamos comparar se o elemento 'numb[1]' é maior que 'highest'.
Vamos comparar se o elemento 'numb[2]' é maior que 'highest'.
Vamos comparar se o elemento 'numb[3]' é maior que 'highest'.
...
Vamos comparar se o elemento 'numb[999999]' é maior que 'highest'.

Essas comparações vamos fazer com um simples teste condicional IF, dentro de um looping FOR que vai percorrer todos os elementos do array gigante:
if (numb[count] > highest)

Ora, se algum elemento for maior, devemos alterar o valor armazenado em 'highest' para esse novo valor, concorda? Resumindo, basta fazer:
highest = numb[count];

Nosso código fica assim:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main()
{
    const int SIZE = 1000000;
    int numb[SIZE], count, highest, lowest;
    srand( time(0) );

    for (count=0; count<SIZE; count++ )
        numb[count] = rand();

    highest=numb[0];
    for (count=1; count<SIZE; count++){
        if (numb[count] > highest)
            highest = numb[count] ;
    }

    lowest=numb[0];
    for (count=1; count<SIZE; count++){
        if (numb[count] < lowest)
            lowest = numb[count] ;
    }

    cout<<"Maior: "<<highest<<endl;
    cout<<"Menor: "<<lowest<<endl;
}
E para achar o menor valor?
A lógica é a mesma.

Fazemos com que, de início, o menor valor armazene o valor do primeiro elemento do array:
lowest = numb[0];

Depois comparamos todos os outros elementos do array com esse 'lowest', checando se os outros elementos do array são MENORES, que lowest, se forem, atualizamos o novo valor de lowest.

Aliás, dá até pra gente fundir esses dois laços FOR com IFs aninhados, em um só laço, veja:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main()
{
    const int SIZE = 1000000;
    int numb[SIZE], count, highest, lowest;
    srand( time(0) );

    for (count=0; count<SIZE; count++ )
        numb[count] = rand();

    highest=numb[0];
    lowest=numb[0];

    for (count=1; count<SIZE; count++){
        if (numb[count] > highest)
            highest = numb[count];

        if (numb[count] < lowest)
            lowest = numb[count];
    }

    cout<<"Maior: "<<highest<<endl;
    cout<<"Menor: "<<lowest<<endl;
}
1 milhão de elementos, e achamos o menor e o maior elemento de maneira praticamente instantânea. Poderoso esse esquema de buscar com arrays e laços, não acha? Fantástico o C++.

Nenhum comentário:

Postar um comentário