Løsningsforslag - oppgaver i Avsnitt 1.5.4


Oppgave 1

  public static int binærsøk(int[] a, int v, int h, int verdi)
  {
    if (v < 0 || h >= a.length)
      throw new IllegalArgumentException("Ulovlig intervall");

    if (h < v) return -(v + 1);  // tomt intervall
    else if (h == v)
    {
      if (verdi == a[v]) return v;
      else if (verdi < a[v]) return -(v + 1);
      else return -(v + 2);
    }
    else
    {
      int m = (v + h)/2;     // finner midten

      if (verdi > a[m]) return binærsøk(a,m+1,h,verdi);
      else return binærsøk(a,v,m,verdi);
    }
  }

  public static int binærsøk(int[] a, int verdi)
  {
    return binærsøk(a,0,a.length-1,verdi);
  }

Oppgave 2

  public static int lineærsøk(int[] a, int i, int verdi)
  {
    if (i == a.length) return -(i + 1);
    else if (a[i] == verdi) return i;
    else if (a[i] > verdi) return -(i + 1);
    else return lineærsøk(a,i+1,verdi);
  }

  public static int lineærsøk(int[] a, int verdi)
  {
    return lineærsøk(a,0,verdi);
  }