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

Voltar à Lista de Código de Exemplo


Máximo de um array

(TestMax.java)

// -----------------------------------------------------------
// Estruturas de Dados 2018/2019 (CC1007) - DCC/FCUP
// http://www.dcc.fc.up.pt/~pribeiro/aulas/edados1819/
// -----------------------------------------------------------
// 3 versões para descobrir o máximo de um intervalo de um array:
// (uma iterativa e duas recursivas)
// Última alteração: 21/04/2018
// -----------------------------------------------------------

public class TestMax {
   
   // Os 3 métodos seguintes recebem array v[] e duas posições start e end
   // e devolvem o maior número do array entre start e end (inclusive)
   
   // --------------------------------------------------------
   
   // Versão iterativa   
   static int maxIt(int v[], int start, int end) {
      int maxSoFar = v[start];                // Maior até agora
      for (int i=start+1; i<=end; i++)        // Percorrer intervalo
         maxSoFar = Math.max(maxSoFar, v[i]); // Actualizar máximo
      return maxSoFar;
   }

   // --------------------------------------------------------
   
   // Versão 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
   }
   
   // --------------------------------------------------------
   
   // Versão 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 médio
      int max1 = maxRec2(v, start, middle); // recursão na metade esquerda
      int max2 = maxRec2(v, middle+1, end); // recursão 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}; // Inicialização 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));
   }

}