二分查詢及其相關演算法的java實現

2021-08-01 17:31:41 字數 1376 閱讀 5349

1. 當要查詢第一次出現的數(最左),mid下取整;

2. 當要查詢最後一次出現的數(最右),mid上取整;

/**

* 找乙個數,如果有,返回任意乙個(返回true),否則返回false

*@param data

*@param k

*/public

static

boolean

binarysearch1(int data, int k) else

if(data[mid] > k)else

}return

false;

}

public static int firstbadversion(int n)

return start;

}

/**

* k最後一次出現的位置,沒有返回-1

*@param data

*@param k

*@return

*/private

static

intbinarysearch2(int data, int k) else

if(data[mid] > k)else

}if(l == r && data[l] == k)else

}

/**

* 查詢小於k的最大的數

*@param data

*@param k

*@return

*/private

static

intbinarysearch3(int data, int k) 用兩個數來判斷,不加1的話(mid = l & l = mid)會死迴圈

if(data[mid] >= k)

else

}if(l == r && data[l] < k)else

}

public int getnumberofk(int  array , int k) 

//找k第一次出現的下標

public int getfirstk(int nums, int k)

if(nums[begin] == k)

return

begin;

else

return -1; //沒找到

}//找最後一次出現的下標

public int getlastk(int nums, int k)

if(nums[end] == k)

return

end;

else

return -1;

}

二分查詢演算法 java

題目 在乙個有序陣列中查詢給定值得下標 其中有兩個前提,一是順序儲存結構,二是儲存結構已經是排好序的。給定前提 int array new int int num 50 intleft 0,right array.length 1 先看看直接用迴圈的方式 int index 1 int middle...

Java演算法 二分查詢

查詢 基本查詢 陣列元素無序 從頭到尾 二分查詢 折半查詢 陣列元素有序 分析 a 定義最大索引,最小索引 b 計算出中間索引 c 拿中間索引的值和要查詢的值進行比較 相等 就直接返回當前的中間索引 不相等 大 左邊找 小 右邊找 d 重新計算中間索引 大 左邊找 max mid 1 小 右邊找 m...

java 二分查詢演算法

二分查詢又稱折半查詢,它是一種效率較高的查詢方法。折半查詢的演算法思想是將數列按有序化 遞增或遞減 排列,查詢過程中採用跳躍式方式查詢,即先以有序數列的中點位置為比較物件,如果要找的元素值小 於該中點元素,則將待查序列縮小為左半部分,否則為右半部分。通過一次比較,將查詢區間縮小一半。折半查詢是一種高...