给出一个高效算法,求出 1,3,6………..n 这串数中大于 M 小于 N 的数。(M和N是给定的数)
使用二分(折半)查找法应该是最快的查找方法之一。
/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
int a[10]={1,2,3,4,5,8,10,110,120,1000};
int left,right,mid;
int num,cnt=0;
printf("请输入你要查找的数据:");
scanf("%d",&num);
left = 0;
right= 9;
while(left<=right){
//计算查找次数
cnt++;
//获取中间位置元素的下标
mid = (left+right)/2;
if(num>a[mid]){
//往右找
left=mid+1;
}else if(num<a[mid]){
//往左找
right=mid-1;
}else{
//找到了
printf("在第%d个位置找到了数据,共查找%d次\n",mid+1,cnt);
break;
}
};
if(left>right){
printf("你要查找的数据不存在\n");
}
for(right=mid;right<10;right++){
printf("%d\t",a[right]);
}
}