作业帮 > 综合 > 作业

查找算法:采用二分法在有序数组 中查找一数,指出数的位置和查找次数.

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/28 01:09:54
查找算法:采用二分法在有序数组 中查找一数,指出数的位置和查找次数.
查找算法:采用二分法在有序数组 int a[N]={3,9,11,12,21,23,56,61,89,98};中查找一数,指出数的位置和查找次数.
#include <iostream>
using namespace std;

void BinarySearch(int* list, int len, int key, int* index_t) {
\x09//最低边界 
\x09int low = 0; 
\x09//最高边界 
\x09int high = len - 1; 
\x09while (low <= high) {
\x09\x09index_t[0]++;
\x09\x09//取中间值
\x09\x09int middle = (low + high) / 2;
\x09\x09if (list[middle] == key) {
\x09\x09\x09index_t[1] = middle;
\x09\x09\x09return;
\x09\x09} 
\x09\x09else if (list[middle] > key) {
\x09\x09\x09//下降一半
\x09\x09\x09high = middle - 1; 
\x09\x09}
\x09\x09else {
\x09\x09\x09//上升一半
\x09\x09\x09low = middle + 1; 
\x09\x09}
\x09} 
\x09//没找到 
\x09index_t[1] = -1;


int main() {
\x09const int N = 10;
\x09int list[N]= {3, 9, 11, 12, 21, 23, 56, 61, 89, 98};
\x09int index_t[2] = {0};
\x09BinarySearch(list, N, 12, index_t);
\x09
\x09cout << "查找次数为:" << index_t[0] << endl; 
\x09if (index_t[1] != -1)
\x09\x09cout << "已经找到12,索引位置为:" << index_t[1] << endl; 
\x09else
\x09\x09cout << "没找到!" << endl;
}