Penjelasan terperinci tentang kemahiran separuh carian_javascript javascript

WBOY
Lepaskan: 2016-05-16 16:17:59
asal
1822 orang telah melayarinya

Kaedah carian separuh:

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

log2(n 1)-1

Salin kod Kod adalah seperti berikut:

//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'));
Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!