go语言可以做网站吗租点点电脑租赁公司
前言:
作业和那个不是一个级别的
内容:
3.在一个有序数组中查找具体的某个数字n。(讲解二分查找)
下标就是数组的下标,从0开始,有点难度,我头有点晕,就是大概知道了,写代码也写不出来的那种,等我晚上在写
先看下问题代码,这已经是我边看边写的代码了,还出错误了
#include <stdio.h>
int main()
{int arr[] = {1,2,3,4,5,6,7,8,9,10};int left = 0;int sz = sizeof(arr)/sizeof(arr[0]);int right = sz -1;int k = 7;while(left >= right){int mid = (left + right)/2; if(arr[mid] > k){left = mid + 1;	}else if(arr[mid] < k){right = mid -1;	}else{printf("找到了,下标为:%d\n", mid);}}return 0;}  
正确的值
#include <stdio.h>
 int main()
 {
     int arr[] = {1,2,3,4,5,6,7,8,9,10};
     int left = 0;
     int sz = sizeof(arr)/sizeof(arr[0]); //计算元素个数 
     int right = sz -1;                    //计算右边的下标 
     
     int k = 7;    //随机选择一个数,找出在数组是哪个下标 
     while(left <= right)     //循环遍历,找出下标 
     {
         int mid = (left + right)/2; //每次都需要重新计算,因为每次的left或right都会变 
         if(arr[mid] > k)     //如果下标的值大于实际值,则右边偏移 
         {
         right = mid - 1;    
         }
         else if(arr[mid] < k)  
         {
         left = mid +1;    
         }
         else
         {
         printf("找到了,下标为:%d\n", mid);
         break;                              //找到值,需要跳出循环,不然mid值不变,会一直循环 
         }
     
         
     }
    
     
     
     return 0;
  } 
