1、基本思想:找出已知有序队列中与给定关键字相同的数的具体位置。原理是分别定义三个指针low,high,mid,分别指向待查元素所在范围的下界和上界及区间的中间位置,即mid=(low+high)/2,并让关键字与mid所指的数比较,若相等则查找成功并返回mid,若关键字小于mid所指的数则high=mid-1,否则low=mid+1,然后继续循环知道找到或找不到为止。
2、代码如下:
// FindMostMessage.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <stdio.h> #include <iostream> using namespace std; #define MAXSIZE 10 typedef struct{ int list[MAXSIZE]; int length; }List; int dichotomy_search(List s,int k) { int low,mid,high; low=0; high=s.length-1; mid=(low+high)/2; while(high>low) { cout<<mid<<endl; if(s.list [mid]>k)//turn to the left part { high=mid-1; mid=(low+high)/2; } else if(s.list[mid] <k) //turn to the right part { low=mid+1; mid=(low+high)/2; } else return mid+1;//The key has been searched } return 0;//no such key } int main(int argc,char **argv) { List s; int i,k,rst; int a[MAXSIZE]={1,3,6,12,15,19,25,32,38,87}; for(i=0;i<MAXSIZE;i++) { s.list[i]=a[i]; } s.length=MAXSIZE; printf("Input key number:"); scanf("%d",&k); rst=dichotomy_search(s,k); if(rst==0) printf("Key:%d is not in the list! ",k); else printf("The key is in the list,position is:%d ",rst); return 0; }