(Translated by https://www.hiragana.jp/)
Recerca binari - Wikipedia, le encyclopedia libere Saltar al contento

Recerca binari

De Wikipedia, le encyclopedia libere
Version del 20:02, 30 octobre 2011 per Christophoro S (discussion | contributiones) (Traduction partial de it:Ricerca dicotomica)
(diff) ← Version precedente | Version actual (diff) | Version sequente → (diff)
Nota
Nota

In informatica, le recerca binari es un algorithmo de recerca que individua le indice de un determinate valor presente in un ensemble ordinate de datos. Le recerca binari demanda un accesso casual al datos in le quales cercar.

Implementationes

E isto es un implementation recursive in Java:

public class BinarySearch {
	public int binarySearch (int a[], int p, int r, int k) {
		int q, s = -1;
		if (p <= r) {
			q = (p+r)/2;
			if (k < a[q])
				s = binarySearch(a, p, q-1, k);
			if (k > a[q])
				s = binarySearch(a, q+1, r, k);
			if (k == a[q])
				return q;
		}
		else
			return -1;
	}
}

ubi le methodo binarySearch del classe BinarySearch recipe in ingresso obviemente un array, duo indices cardine e le elemento de recercar.

Seque un implementation del algorithmo multo simile al precedentes ma in un differente linguage, C#.

Isto es un implementation sin recurrentia.

/* Function pro Recerca Binari sin recurrentia */
 int Binary_Search(int []array, int elemento)  
 {
     int start = 0, end = array.length - 1, centro = 0;
     while (start <= end)
     {
         centro = (start + end) / 2;
         if (elemento < array[centro])
             end = centro - 1;
         else
             if (elemento > array[centro])
                 start=centro+1;
             else
                 return centro; //Caso: elemento==array[centro]
     }
     return -1;
 }

Con recurrentia linguage C#:

/* Function pro Recerca Binari con recurrentia */
 int BinSe_ri(int[] arr, int n, int start, int end)
 {
     if (start > end)
         return -1;
     int middle = (start + end) / 2;
     if (n < arr[middle]) 
        return BinSe_ri(arr, n, start, middle - 1);
     if (n > arr[middle]) 
        return BinSe_ri(arr, n, middle + 1, end);
     else
        return middle;
 }