當前位置:偏方大全网 - 藥品查詢 - 什麽是二分搜索法?

什麽是二分搜索法?

二分搜索法,也稱為二分搜索法,是壹種有效的搜索方法。但是二分搜索法要求線性表必須采用順序存儲結構,表中的元素按關鍵字順序排列。

二分搜索法的優勢和劣勢

優點是比較次數少,搜索速度快,平均性能好;

它的缺點是要查找的列表要求是有序的,而且很難插入和刪除。

因此,對半查找的方法適用於查找不頻繁變化的頻繁有序列表。

使用條件:搜索序列是序列結構,有序。

過程

首先,假設表格中的元素按升序排列,將記錄在表格中間的關鍵詞與搜索關鍵詞進行比較,如果相等,則搜索成功;否則,使用中間位置記錄將表分成兩個子表。如果中間位置記錄的關鍵字大於搜索關鍵字,則進壹步搜索前面的子表,否則進壹步搜索後面的子表。重復上述過程,直到找到滿足條件的記錄使搜索成功,或者直到子表不存在,此時搜索不成功。

利用循環實現二分法搜索

公共類二進制搜索{

公共靜態void main(String[] args) {

//生成隨機數組int[]array = suiji();

//對數組進行排序。排序(數組);

System.out.println("生成的隨機數組是"+arrays . tostring(array));

System.out.println("要查找的值:");

掃描儀輸入=新掃描儀(system . in);

//搜索的目標值int aim = input . nextint();

//用二分法求int index =二分搜索法(array,aim);

System.out.println("搜索值的索引位置:"+index);

}

/* * *生成隨機數組*

* @return返回值,返回隨機數組*/

private static int[] suiji() {

// random.nextInt(n)+m?返回隨機數int n = new Random()。m和m+n-1之間的nextInt(6)+5;

int[]array = new int[n];

//循環遍歷為數組賦值(int I = 0;我& lt數組.長度;i++) {

array[i] = new Random()。nextInt(100);

}

返回數組;

}

/* * *二分法搜索?-循環方式實現*

* @ Paraarray查找數組* @ Paraaim查找值* @return返回值,成功返回索引,或-1 */

private static int binary search(int[]array,int aim) {

//數組int left的最小索引值= 0;

//數組最大索引值int right = array . length-1;

int mid

while(left & lt;=右){

mid =(左+右)/2;

//如果搜索值小於中間值,如果(Aim

右= mid-1;

//如果搜索值大於中間值,則將整個搜索範圍的後壹半作為新的搜索範圍} else If(aim >;array[mid]) {

left = mid+1;

//如果搜索數據正好等於中間元素值,放回中間元素值的索引?}否則{

返回mid

}

}

return-1;

}}

操作結果演示:

從上面的運行結果我們知道,如果要查找的數據存在於數組中,則輸出數組中數據的索引;如果不存在,輸出-1,即打印-1,數組中不存在該數,否則存在。

第四,二分搜索法是通過遞歸實現的。

公共類BinarySearch2 {

公共靜態void main(String[] args) {

//生成隨機數組int[]array = suiji();

//對數組進行排序。排序(數組);

System.out.println("生成的隨機數組是"+arrays . tostring(array));

System.out.println("要查找的值:");

掃描儀輸入=新掃描儀(system . in);

//搜索的目標值int aim = input . nextint();

//用二分法求int index =二分搜索法(array,aim,0,array。長度-1);

System.out.println("搜索值的索引位置:"+index);

}

/* * *生成隨機數組* * @返回返回值,返回隨機數組*/

private static int[] suiji() {

// Random.nextInt(n)+m?返回隨機數int n = new Random()。m和m+n-1之間的nextInt(6)+5;

int[]array = new int[n];

//循環遍歷為數組賦值(int I = 0;我& lt數組.長度;i++) {

array[i] = new Random()。nextInt(100);

}

返回數組;

}

/* * *二分法搜索-遞歸方式* * @ Paraarray求數組* @ Paraaim?要查找的值* @param left?左邊的最小值* @param right,右邊的最大值* @return返回值,索引返回成功,-1 */

private static int binary search(int[]array,int aim,int left,int right) {

if(aim & lt;array[left]| | aim & gt;數組[右]) {

return-1;

}

//求中間值int mid =(left+right)/2;

if (array[mid] == aim) {

返回mid

} else if(array[mid]& gt;目標){

//如果中間值大於要求的值,繼續從左半部分遞歸返回二分搜索法(array,aim,left,mid-1);

}否則{

//如果中間值小於要求的值,繼續遞歸返回二分搜索法(array,aim,mid+1,array。長度-1);

}

}}

操作結果演示:

總結:

與循環相比,遞歸的代碼更簡單,但它消耗更多的時間和空間,效率很低。在實際學習和工作中,根據情況選擇使用。通常如果我們用loop來實現代碼,只要不是太繁瑣,我們就選擇loop來實現~

  • 上一篇:法國移民需要了解的醫療保健系統
  • 下一篇:女子生前借數百萬從事非法經營丈夫被判不用還是怎麽回事?
  • copyright 2024偏方大全网