1.问题:在一个有序数组中查找数字n
2.思路:通过循环,每次取出数组中间的元素(假设为mid)与n比较,如果n > mid,则n在mid右边,将查询起点修改为中间元素;如果n < mid,则n在mid的左边,修改查询终点为中间元素。如果n = mid,当前元素就是所查找的n,退出循环
3.代码展示
#include <stdio.h>
// 注意数组传输到函数只有首地址,所以sizeOf求得的是指针的大小,数组长度需在主函数求好
void search(int n,int arr[],int length){
// 定义一个变量检测运行效率
int flag = 0,start = 0;
while(start < length){
flag++;
// 每次获取中间元素
int mid = arr[(start + length)/2];
if(n > mid){
start = mid;
}
else if(n < mid){
length = mid;
}
else if(n = mid){
printf("flag = %d",flag);
break;
}
}
}
int main(){
int arr[100] = {0};
int n = 0;
// 获取数组的长度
int length = sizeof(arr) / sizeof(arr[0]);
// 通过循环添加数组元素
for(int i = 0;i < length;i++){
arr[i] = [i];
}
printf("输入你要查找的数字n:");
scamf("%d",&n);
search(n,arr[100],length);
}