【题目要求】
从给定有序序列中查找需求数。
【题目解析】
找出下标为n/2的值进行比较,若大于则在左侧找,小于在右侧找,再次找其n/2的值比较,循环直至找到或序列结束
1 给定有序序列
2 循环+判断:找到下标为n/2的值比较,循环取对半,再次比较。
3 取不到下标为n/2时,循环结束,找不到
#include<iostream>
using namespace std;
int main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int find,k=0;
cin>>find;
int low=0,upper,mid;
upper=10-1; //实际操作时给定序列可能不为10
while(low<=upper)
{
mid=low+(upper-low)/2; //不用(upper+low)/2,避免upper+low溢出
if(a[mid]>find) upper=mid-1;
else if(a[mid]<find) low=mid+1;
else
{
cout<<"为第"<<mid+1<<"个"<<endl;
k++; //用来判断结束时是否找到
break;
}
}
if(k==0) cout<<"Not find"<<endl;
return 0;
}
【总结】
查找必须有给定序列,选择排序一般用于有序序列查找
各种排序、查找方法汇总请见: