顺序查找和二分查找

 案例1):

复制代码
 1 #include <stdio.h>
 2 
 3 int seqSearch(int arr[], int arrLen, int val){  //定义一个数组,一个数组长度,目标值
 4     for (int i = 0; i < arrLen; i++){
 5         if(arr[i] == val){
 6             return i;
 7         }
 8     }
 9     return -1;  //找不到则返回-1
10 }
11 
12 void main(){
13     int arr[] = {23, 1, 34, 89, 101};
14     int arrLen = sizeof(arr)/sizeof(int);
15     int index = seqSearch(arr, arrLen, -101);
16     if(index != -1){
17         printf("找到,下标为%d", index);
18     }else{
19         printf("错误,没有找到");
20     }
21     
22 }
复制代码

案例2):

进行二分查找的前提:是一个有序数组!!

思路:

 

 

 

复制代码
 1 #include <stdio.h>
 2 
 3 int binarySearch(int arr[], int leftIndex, int rightIndex, int findVal){
 4     //如果leftInde > rightIndex,说明这个数组都比较过,没有结果
 5     if(leftIndex > rightIndex){
 6         return -1;
 7     }
 8     
 9     //先找到中间的数
10     int midIndex = (leftIndex + rightIndex)/2;  //此时leftIndex=0,rightIndex=5,最后结果为2(精度丢失)
11     int midVal = arr[midIndex]; //arr[2]=10
12     //进行比较
13     if(midVal > findVal){   //如果midVal > findVal,说明要在midVal的左边查找
14         binarySearch(arr, leftIndex, midIndex-1, findVal);
15     }else if(midVal < findVal){ //如果midVal < findVal,说明要在midVal的右边查找
16         binarySearch(arr, midIndex+1, rightIndex, findVal);
17     }else{
18         return midIndex;    //返回改数的下标
19     }
20 }
21 
22 void main(){
23     int arr[] = {1, 8, 10, 89, 1000, 1234};
24     int arrLen = sizeof(arr)/sizeof(int);
25     int index = binarySearch(arr, 0, arrLen-1, 89);
26     if(index != -1){
27         printf("index = %d", index);
28     }else{
29         printf("没有找到");
30     }
31 }
复制代码
posted @   Morning枫  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示