二分查詢排序 JAVA

2021-08-15 23:13:43 字數 2147 閱讀 3479

最壞情況:

logn

最好情況:o(1)

平均時間複雜度為o(logn)

二分查詢也稱折半查詢,或者對半查詢(binary search),是一種效率較高的查詢方法。

要求:(1)必須採用順序儲存結構 (2).必須按關鍵字大小有序排列

將n個元素分成大致相等的兩部分,取a[n/2]與x做比較,如果x=a[n/2],則找到x,演算法中止;

如果x>a[n/2],則繼續在陣列a的左半邊查詢x,如果x

二分查詢分迴圈和遞迴兩種方式:

遞迴二分查詢:

/**

* @descript:遞迴二分查詢(找不到,返回-1,找到的話,返回下標)

* * @author ljonah 2023年3月1日

* @param array

* 陣列

* @param searchdata

* 要查詢的值

* @param begin

* 開始位置

* @param end

* 結束位置

* @return

*/public static int recursivebinarysearch(int array, int searchdata, int begin, int end)

迴圈二分查詢:

/**

* @descript:迴圈二分查詢(找不到,返回-1,找到的話,返回下標)

* * @author ljonah 2023年3月1日

* @param array

* 陣列

* @param searchdata

* 要查詢的值

* @param begin

* 開始位置

* @param end

* 結束位置

* @return

*/public static int loopbinarysearch(int array, int searchdata, int begin, int end)

return -1;

}

測試:

public static void main(string args) ;

int searchdata =4;

system.out.println("初始陣列:" + arrays.tostring(array) + ";查詢值:" + searchdata + ";");

// 遞迴二分查詢

int index = recursivebinarysearch(array, searchdata, 0, array.length - 1);

if (index > -1)

system.out.println(searchdata + "在陣列" + arrays.tostring(array) + "中的索引是:" + index);

else

system.out.println("沒找到!");

// 迴圈二分查詢

index = loopbinarysearch(array, searchdata, 0, array.length - 1);

if (index > -1)

system.out.println(searchdata + "在陣列" + arrays.tostring(array) + "中的索引是:" + index);

else

system.out.println("沒找到!");

}

測試結果:

初始陣列:[0, 3, 4, 8, 9];查詢值:4;

mid=4

4在陣列[0, 3, 4, 8, 9]中的索引是:2

mid=4

4在陣列[0, 3, 4, 8, 9]中的索引是:2

java二分查詢

public class binarysearch int value 11 int pos binarysearch int arrays,value system.out.println the pos is pos private static int binarysearch int int...

Java二分查詢

二分查詢的陣列是有序排列的。查詢時,會首先定位到陣列的中間位置,將中間值和查詢值比較,如果相等則返回,否則,如果當前元素值小於查詢值,則繼續在陣列的後面一半查詢,如果當前元素值大於查詢值,則在陣列的前面部分查詢,直到找到目標值或者無法再二分陣列時停止。static boolean binaryser...

java 二分查詢

二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成前 後...