返回帶查詢元素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,我們計算時間複雜度是按照最壞的情況進...
二分查詢及其變種
首先說下普通二分查詢的思路 普通二分查詢是在乙個沒有重複的排序陣列中,找到目標值 思路就是先從中間找,如果中間值大於目標值,說明目標值在左半區 如果中間值小於目標值,說明目標值在右邊,當中間值等於目標值,返回他的下標,這裡的陣列預設都不為空 給定乙個有序陣列和乙個關鍵字,找到該值在陣列中的下標,否則...
二分查詢演算法及其變種
前言 二分查詢演算法也稱為折半查詢演算法,是一種在查詢演算法中普遍使用的演算法。其演算法的基本思想是 在有序表中,取中間的記錄作為比較關鍵字,若給定值與中間記錄的關鍵字相等,則查詢成功 若給定的值小於中間記錄的關鍵字,則在中間記錄的左半區間繼續查詢 若給定值大於中間記錄的關鍵字,則在中間記錄的右半區...