Rumah > pembangunan bahagian belakang > C++ > Masalah dalam banyak pelaksanaan carian binari?

Masalah dalam banyak pelaksanaan carian binari?

WBOY
Lepaskan: 2023-09-10 16:21:08
ke hadapan
901 orang telah melayarinya

Masalah dalam banyak pelaksanaan carian binari?

Kami tahu bahawa algoritma carian binari adalah lebih baik daripada algoritma carian linear. Masa yang diperlukan untuk melaksanakan algoritma ini ialah O(log n). Pada kebanyakan masa, terdapat beberapa isu dengan kod yang dilaksanakan. Mari kita pertimbangkan fungsi algoritma carian binari seperti yang ditunjukkan di bawah −

Contoh

int binarySearch(int array[], int start, int end, int key){
   if(start <= end){
      int mid = (start + end) /2); //mid location of the list
      if(array[mid] == key)
         return mid;
      if(array[mid] > key)
         return binarySearch(array, start, mid-1, key);
         return binarySearch(array, mid+1, end, key);
   }
   return -1;
}
Salin selepas log masuk

Algoritma ini berfungsi dengan baik sehingga ia mencapai nombor yang lebih besar pada permulaan dan akhir. Jika (mula + tamat) melebihi nilai 232 - 1, maka nombor negatif boleh dikembalikan selepas dibalut. Oleh kerana nombor negatif tidak disokong sebagai indeks tatasusunan, ini mungkin menyebabkan beberapa masalah.

Untuk menyelesaikan masalah ini, terdapat beberapa cara yang berbeza.

Kaedah 1

int mid = start + ((end - start) / 2)
Salin selepas log masuk

Kaedah kedua hanya berfungsi di Jawa kerana tiada operator >>>

Kaedah 2 (hanya untuk Java)

int mid = (start + end) >>> 1
Salin selepas log masuk

Memandangkan >>> tidak disokong dalam C atau C++, kita boleh menggunakan kaedah berikut.

Kaedah 3

int mid = ((unsigned int) low + (unsigned int) high) >> 1
Salin selepas log masuk

Atas ialah kandungan terperinci Masalah dalam banyak pelaksanaan carian binari?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:tutorialspoint.com
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