算法讲解请参阅下面参考书籍,这里只给出自己练习时的代码实现。
参考书籍:《算法设计与分析基础·3ed》
1.伪代码
算法: BinarySearch(A[0...n-1], K)
//实现非递归的折半查找
//输入:一个升序数组A[0...n-1]和一个待查找元素K
//输出:如果元素存在,则输出查找元素所对应的数组下标;如果没有,则返回-1
l = 0; r = n-1;
while l <= r do
m = ⌊(l+r)/2⌋
if K = A[m] return m
else if K < A[m] r = m-1
else l = m+1
return -1
2.CPP实现:
#include <iostream>
using namespace std;
int binary_search(int arr[], int length, int K);
int main()
{
int arr[] = {5, 10, 15, 20, 25, 30, 35, 40, 45, 50};
int length = sizeof(arr) / sizeof(int);
int id = binary_search(arr, length, 45);
cout << "id:" << id << endl;
return 0;
}
int binary_search(int arr[], int length, int K)
{
int n = length;
int l = 0;
int r = n - 1;
while(l <= r){
int m = (int) (l+r) / 2;
if(K == arr[m])return m;
else if(K < arr[m]) r = m-1;
else l = m+1;
}
return -1;
}
3.算法复杂度:
输入规模:n
基本操作:三路数值比较
复杂度: