Dalam senarai tersusun, apabila membandingkan nilai data yang hendak dicari dengan nilai elemen tengah julat carian, tiga situasi akan berlaku:
1) Jika nilai data yang akan ditemui adalah sama persis dengan nilai elemen tengah, indeks nilai elemen tengah akan dikembalikan.
2) Jika nilai data yang hendak dicari adalah lebih kecil daripada nilai elemen tengah, separuh pertama daripada keseluruhan julat carian akan digunakan sebagai julat carian baharu dan 1) akan dilaksanakan sehingga nilai yang sama. nilai ditemui.
3) Jika nilai data yang hendak dicari lebih besar daripada nilai elemen tengah, maka separuh kedua daripada keseluruhan julat carian akan digunakan sebagai julat carian baharu dan 1) akan dilaksanakan sehingga nilai yang sama ditemui
4) Jika tiada nilai yang sama ditemui pada akhirnya, mesej ralat akan dikembalikan.
Difahamkan sebagai pokok binari: nilai tengah ialah akar pokok binari, separuh pertama ialah subpokok kiri, dan separuh kedua ialah subpokok kanan. Bilangan carian untuk kaedah carian separuh adalah tepat bilangan tahap di mana nilai itu berada. Di bawah keadaan kebarangkalian yang sama, ia adalah lebih kurang
//Data ialah tatasusunan yang hendak dicari, x ialah nilai data yang hendak dicari, beg ialah permulaan julat carian, dan yang terakhir ialah penghujung julat carian
//Kaedah bukan rekursif
int BiSearch(int data[], const int x, int beg, int last)
{
int tengah;//kedudukan tengah
Jika (minta > lepas)
{
Kembali -1;
}
Sementara(minta <= lepas)
{
pertengahan = (minta terakhir) / 2;
Jika (x == data[pertengahan] )
Kembali pada pertengahan
jika tidak (data[pertengahan] < x)
mohon = pertengahan 1;
jika tidak (data[pertengahan] > x)
terakhir = pertengahan - 1;
}
Kembali -1;
}
//Kaedah rekursif
int IterBiSearch(int data[], const int x, int beg, int last)
{
int pertengahan = -1;
pertengahan = (minta terakhir) / 2;
Jika (x == data[pertengahan])
{
Kembali pada pertengahan
}
lain jika (x < data[pertengahan])
{
kembalikan IterBiSearch(data, x, mohon, pertengahan - 1);
}
lain jika (x > data[pertengahan])
{
kembalikan IterBiSearch(data, x, pertengahan 1, terakhir);
}
Kembali -1;
}
//Fungsi utama
int _tmain(int argc, _TCHAR* argv[])
{
int data1[60] = {0};
int no2search = 45;
cout << "Susun aturnya ialah : " <<
int saiz = saiz(data1)/saiz(int);
untuk (int i = 0; i < saiz; i )
{
data1[i] = i;
cout << data1[i] <<
}
cout <<
int indeks = -1;
//index = BiSearch(data1, no2search, 0, saiz);
Indeks = IterBiSearch(data1, no2search, 0, saiz);
cout << "Indeks " <<
Getchar();
Kembalikan 0;
}
/**
* Finden Sie die Position des Zeichens im Array um die Hälfte (geordnete Liste)
* @param array Das abgerufene Array
* @param x Das Zeichen, nach dem gesucht werden soll
* @returns Die Position des Zeichens im Array. Wenn nicht gefunden, wird -1
zurückgegeben
*/
Funktion binäreSuche(array,x){
var lowPoint=1;
var higPoint=array.length;
var returnValue=-1;
var midPoint;
var gefunden=false;
while ((lowPoint<=higPoint)&&(!found)){
midPoint=Math.ceil((lowPoint higPoint)/2);
//console.log(lowPoint "====" midPoint "====" higPoint);
if(x>array[midPoint-1]){
lowPoint=midPoint 1;
}
sonst if(x
higPoint= midPoint-1;
}
sonst if(x=array[midPoint-1]){
gefunden=wahr;
}
}
if(found){
returnValue=midPoint;
}
return returnValue;
}
/*var array2=[1,2,3,4,5,6,7,8,9,100,109];*/
var array2=['a','b','c','d','e','f','g'];
console.log(binarySearch(array2,'c'));