1. 问题:假设现在有一个有序的数组array(已按升序排列好的),又有一个数num,现在查找这个数num是否在数组array中。
问题分析:假设num在数组array中,那么怎么进行折半查找呢?
1)先将num和数组中间的那个数比较
2)如果num小于中间的那个数,那就继续在前一半进行查找
3)如果num大于中间的那个数,就继续在后一半进行查找。
4)如果查找到就返回num所在array的下标。
#include <stdio.h>
#include <iostream>
using namespace std;
/* *
参数说明:
int a[]表示要查找的有序数组
int n 表示数组a的长度
int num 表示要查找的那个数
返回值:
int类型
如果找到num,返回它所在的下标
如果没找到,返回-1
* */
int midsearch(int a[],int n,int num)
{
int low,high,mid;
low = 0;
high = n-1;
while(low <= high)
{
mid = (low + high)/2;
if(num > a[mid])
{
low = mid + 1;
}
else if(num < a[mid])
{
high = mid -1;
}
else return mid;
}
return -1;//没有找到
}
int main(void)
{
int arr[10] = {13,22,41,56,58,59,64,65,70,86};
int num = 64;
int index = midsearch(arr,10,num);
printf("%d在数组arr中的下标是%d.\n",num,index);
system("pause");
return 0;
}
输出结果: