心血来潮,编了一个二分查找法,使用了两种方法,一个是循环,一个是递归 自己检查过,算法没有问题,希望大家一起学习,如有bug请联系我,谢谢! #include <iostream> using namespace std; //二分查找法(循环方法) int binery(int* data, int n, int f); //二分查找法(递归方法) int recursion(int* data, int l, int r, int f); int main(int argc, char *argv[]) { int data[12] = {1,2,3,4,5,6,7,8,9,10,11,12}; int result = binery(data, 12, 5); cout << "循环方法查找到的位置为:"<< result << endl; int result1 = recursion(data, 0, 11, -10); cout << "递归方法查找到的位置为:"<< result1 << endl; return 0; } //data 查找的数组 // n 数组长度 // f 要查找的数 // 查找失败返回-1 int binery(int* data, int n, int f) { int left = 0, right = n; int mid = right/2; //注意mid一定左边位置和右边位置之间,否则运行结束 while (left <= mid && right >= mid) { if (f == data[mid]) { return mid; } else if (f < data[mid]) { right = mid - 1; } else { left = mid + 1; } mid = (left + right)/2; } //没有找到 return -1; } //data 查找的数组 // l 数组段左边位置 // r 数组段右边位置 // f 查找值 // 查找失败返回-1 int recursion(int* data, int l, int r, int f) { int left = l, right = r; int mid = (left + right)/2; //注意mid一定左边位置和右边位置之间,否则运行结束 if (left <= mid && right >= mid) { if (f == data[mid]) { return mid; } else if (f < data[mid]) { right = mid - 1; return recursion(data, left, right, f); } else { left = mid + 1; return recursion(data, left, right, f); } }else{ //没有找到 return -1; } }