二分查找

来源:互联网 发布:ubuntu 14.04 ant 编辑:程序博客网 时间:2024/06/10 20:03
//学习地址 // https://www.cnblogs.com/luoxn28/p/5767571.html#include<iostream>using namespace std;int Search(int *Array,int len,int Value){int index = 0;int low = 0;int high = len-1;int mid = (high - low) / 2;while (true){if (Array[mid]==Value){return mid;}else if (Array[mid]>Value)//查找数据在左边{high = mid - 1;mid = (high +low) / 2;}else{low = mid + 1;mid = (high + low) / 2;//mid=(high-low)/2+low}}return index;} /*** 二分查找,找到该值在数组中的下标,否则为-1*/static int binarySerach(int array[],int len , int key) {int left = 0;int right = len-1;// 这里必须是 <=while (left <= right) {int mid = (left + right) / 2;if (array[mid] == key) {return mid;}else if (array[mid] < key) {left = mid + 1;}else {right = mid - 1;}}return -1;}// 查找最后一个相等的元素static int findLastEqual(int array[], int len,int key) {int left = 0;int right = len - 1;// 这里必须是 <=while (left <= right) {int mid = (left + right) / 2;if (array[mid] <= key) {left = mid + 1;}else {right = mid - 1;}}if (right >= 0 && array[right] == key) {return right;}return -1;}int main(){int array[13] = { 1, 2, 3, 4, 5,6,7, 8, 9,10,10,10 ,10};int index = Search(array, 10,10);cout << index << "值"<< array[index] << endl;int re = findLastEqual(array, 13, 10);cout << "最好一个匹配的位置" << re<<":"<<array[re]<< endl;getchar();return 0;}