二分查找

来源:互联网 发布:js求数组最大值 编辑:程序博客网 时间:2024/05/29 15:28

二分查找也就是折半查找。。

在使用调用函数时,如果函数在前面,则直接调用;

若函数在主函数后面,则要先声明要调用的函数;

#include<stdio.h>int main(){int arr[]={1,2,3,4,5,6,7,8,9,10};int key=5;int left=0;int right=sizeof(arr)/sizeof(arr[0])-1;while(left<=right){int mid=left+(right-left)/2;if(arr[mid]<key){left=mid+1;}else if(arr[mid]>key){right=mid-1;}else{printf("该数字下标已找到:%d",mid);break;}}if(left>right){printf("找不到该数字,请重新输入");}return 0;}#include<stdio.h>binary_search();int main(){int arr[]={1,2,3,4,5,6,7,8,9,10};int key=10;int sz=sizeof(arr)/sizeof(arr[0])-1;int find = binary_search(arr,key,sz);//find收到函数的返回值,若返回mid,则find就等于mid;负责返回-1;if (find==-1){printf("找不到该数字,请重新输入.");}else{printf("该数字下标已找到:%d",find);}return 0;}int binary_search(int arr[],int key,int sz)//int arr[]其实是该数组的首地址,在32根地址线的计算机中,一个字节8个比特位,所以一个地址占4个字节;在64位地址线的计算机中,则是8个字节;{//所以要定义一个变量获取数组长度;int left=0;int right=sz;while(left<=right){int mid=left+(right-left)/2;if(arr[mid]<key){left=mid+1;}else if(arr[mid]>key){right=mid-1;}else{return mid;}}return -1;//return 这里不需要再判断;如果找不到就自动跳转到这里。}


原创粉丝点击