顺序查找和二分查找

 案例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 @ 2022-10-08 23:29  Morning枫  阅读(20)  评论(0编辑  收藏  举报