折半查找法

来源:互联网 发布:js中startwith 编辑:程序博客网 时间:2024/06/07 14:53

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;}

输出结果:


 

 

0 0
原创粉丝点击