二分查詢及其變種

2021-09-01 11:39:11 字數 1152 閱讀 1071

返回帶查詢元素key的下標。若沒有key元素,則返回-1。注意:

1)while迴圈的條件是low<=high;

2) 每次迭代hi=mid-1 或lo=mid + 1 

/**

* 二分查詢,找到該值在陣列中的下標,否則為-1

*/static int binaryserach(int array, int key)

else if (array[mid] < key)

else

}return -1;

}

查詢第乙個相等的元素,也就是說等於查詢key值的元素有好多個,返回這些元素最左邊的元素下標。沒有key時返回-1.

而返回第乙個相等的位置:此時迴圈不變式可以表示為「[0, left)所有元素小於val,而(right, n-1]所有元素都大於等於val」,這樣當程式終止的時候我們arr[left]就是第乙個大於等於val的元素了。

static int findfirstequal(int array, int key) 

else

}if (left < array.length && array[left] == key)

return -1;

}

查詢最後乙個相等的元素,也就是說等於查詢key值的元素有好多個,返回這些元素最右邊的元素下標。

返回最後乙個相等的位置:此時迴圈不變式可以表示為「[0, left)所有元素小於等於val,而(right, n-1]所有元素都大於val」,這樣當程式終止的時候我們arr[right]就是第乙個小於等於val的元素了。

// 查詢最後乙個相等的元素

static int findlastequal(int array, int key)

else

}if (right >= 0 && array[right] == key)

return -1;

}

while (left <= right) 

return right + 1;

二分查詢及其變種

3 二分查詢變種總結 時間複雜度概念還不清楚的可以先看 這個文章 由於二分查詢每次查詢都是從陣列中間切開查詢,所以每次查詢,剩餘的查詢數為上一次的一半,從下表可以清晰的看出查詢次數與剩餘元素數量對應關係 肯定是大於等於1,也就是n 2 k frac 2k n 1,我們計算時間複雜度是按照最壞的情況進...

二分查詢及其變種

首先說下普通二分查詢的思路 普通二分查詢是在乙個沒有重複的排序陣列中,找到目標值 思路就是先從中間找,如果中間值大於目標值,說明目標值在左半區 如果中間值小於目標值,說明目標值在右邊,當中間值等於目標值,返回他的下標,這裡的陣列預設都不為空 給定乙個有序陣列和乙個關鍵字,找到該值在陣列中的下標,否則...

二分查詢演算法及其變種

前言 二分查詢演算法也稱為折半查詢演算法,是一種在查詢演算法中普遍使用的演算法。其演算法的基本思想是 在有序表中,取中間的記錄作為比較關鍵字,若給定值與中間記錄的關鍵字相等,則查詢成功 若給定的值小於中間記錄的關鍵字,則在中間記錄的左半區間繼續查詢 若給定值大於中間記錄的關鍵字,則在中間記錄的右半區...