折半查找法
//折半查找法,要求有序序列,默认由小到大#include<iostream>usingnamespacestd;//普通方法intBinSearch2(int*searchTable,intkey,intlen){//最低位置索引low、最高位置索引high、中间位置索引mid//中间位置的可能情况//len为奇数时,mid为正中间位置mid的左侧和右侧用于同样数目的元素//len为偶数时,mid为正中间往左的那一个元素正中间为小数,正中间往左的那一个位置才是(Low+High)/2//low与high的关系//正常情况下low<high//low==high时,仅剩下最后一个需要判断的元素,此元素可能与key相同,也可能不同//low>high未找到与key相同的元素intlow=0;inthigh=len-1;intmid;while(low<=high){mid=(low+high)/2;//找到与key相等的一个元素位置if(searchTable[mid]==key)returnmid;if(searchTable[mid]>key)high=mid-1;elselow=mid+1;}return-1;}//递归方法intBinSearch3(int*searchTable,intkey,intlow,inthigh){if(low>high)return0;//查找失败intmid=(low+high)/2;if(searchTable[mid]==key)returnmid;//查找成功if(searchTable[mid]>key)returnBinSearch3(searchTable,key,low,mid-1);//左查找elsereturnBinSearch3(searchTable,key,mid+1,high);//右查找}intmain(intargc,char*argv[]){intArray[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};cout<<"3的位置是:"<<BinSearch2(Array,8,15)<<endl;cout<<"3的位置是:"<<BinSearch3(Array,8,1,15)<<endl;return0;}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。