二分尋找,二分尋找演算法
二分尋找又稱折半尋找,優點是比較次數少,尋找速度快,平均效能好;其缺點是要求待查表為有序表,且插入刪除困難。
假設其數組長度為n,其演算法複雜度為o(log(n))
代碼:
#include <iostream>using namespace std;bool BinarySearch(int data[],int start, int end, int number){while(start <= end){int mid=(start + end ) / 2;if(data[mid] == number){return true;}if(data[mid] > number){end = mid - 1;}else{start = mid + 1;}}return false;}int main(){int input[9]={0,1,1,1,3,4,5,6,7}; cout<<BinarySearch(input,0,8,8);return 0;}
運行結果:
二分尋找演算法
前提要求資料排好序,有遞迴和非遞迴版本
int binSearch(const int *Array,int start,int end,int key)
{
int left,right;
int mid;
left=start;
right=end;
while (left<=right) { /注釋中為遞迴演算法,執行效率低,不推薦
mid=(left+right)/2;
/* if (key<Array[mid]) {
return(binSearch(Array,left,mid,key));
}
else if(key>Array[mid]){
return (binSearch(Array,mid+1,right,key));
}
else
return mid;
*/
if (key<Array[mid]) {
right=mid-1;
}
else if(key>Array[mid]){
left=mid+1;
}
else
return mid;
}
return -1;
}
二分尋找演算法
前提要求資料排好序,有遞迴和非遞迴版本
int binSearch(const int *Array,int start,int end,int key)
{
int left,right;
int mid;
left=start;
right=end;
while (left<=right) { /注釋中為遞迴演算法,執行效率低,不推薦
mid=(left+right)/2;
/* if (key<Array[mid]) {
return(binSearch(Array,left,mid,key));
}
else if(key>Array[mid]){
return (binSearch(Array,mid+1,right,key));
}
else
return mid;
*/
if (key<Array[mid]) {
right=mid-1;
}
else if(key>Array[mid]){
left=mid+1;
}
else
return mid;
}
return -1;
}