Estruturas de Dados 2019/2020 (CC1007) - DCC/FCUP

Voltar a Lista de Codigo de Exemplo


Maximo de um array

(TestMax.java)

// -----------------------------------------------------------
// Estruturas de Dados 2019/2020 (CC1007) - DCC/FCUP
// http://www.dcc.fc.up.pt/~pribeiro/aulas/edados1920/
// -----------------------------------------------------------
// 3 versoes para descobrir o maximo de um intervalo de um array:
// (uma iterativa e duas recursivas)
// Ultima alteracao: 21/04/2018
// -----------------------------------------------------------

public class TestMax {
   
   // Os 3 metodos seguintes recebem array v[] e duas posicoes start e end
   // e devolvem o maior numero do array entre start e end (inclusive)
   
   // --------------------------------------------------------
   
   // Versao iterativa   
   static int maxIt(int v[], int start, int end) {
      int maxSoFar = v[start];                // Maior ate agora
      for (int i=start+1; i<=end; i++)        // Percorrer intervalo
         maxSoFar = Math.max(maxSoFar, v[i]); // Actualizar maximo
      return maxSoFar;
   }

   // --------------------------------------------------------
   
   // Versao recursiva 1: dividir em elemento inicial e resto da lista
   static int maxRec1(int v[], int start, int end) {
      if (start == end) return v[start];  // caso base (tamanho 1)
      int max = maxRec1(v, start+1, end); // chamada recursiva (resto da lista)
      return Math.max(v[start], max);     // combinar resultado
   }
   
   // --------------------------------------------------------
   
   // Versao recursiva 2: dividir em metade esquerda e metade direita
   static int maxRec2(int v[], int start, int end) {
      if (start == end) return v[start];    // caso base (tamanho 1)
      int middle = (start + end) / 2;       // ponto medio
      int max1 = maxRec2(v, start, middle); // recursao na metade esquerda
      int max2 = maxRec2(v, middle+1, end); // recursao na metade direita
      return Math.max(max1, max2);          // combinar resultado
   }
   
   // --------------------------------------------------------
   
   public static void main(String[] args) {
      int v[] = {1,5,2,8,4,3,7,6}; // Inicializacao de array

      System.out.println("maxIt: " + maxIt(v, 0, v.length-1));
      System.out.println("maxRec1: " + maxRec1(v, 0, v.length-1));
      System.out.println("maxRec2: " + maxRec2(v, 0, v.length-1));
   }

}