源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C 二分查找 递归与非递归的实现代码

  • 时间:2021-04-27 18:51 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C 二分查找 递归与非递归的实现代码
[u]复制代码[/u] 代码如下:
#include <stdio.h> int binSearch(int arr[], int low, int high, int key); int binSearch2(int arr[], int low, int high, int key); int binSearch3(int arr[],int start,int ends,int key); int main() {     int arr[]={3,8,11,15,17,22,23,26,28,29,34};     //printf("%d",binSearch(arr,0,10,26));     printf("%d",binSearch3(arr,0,10,26));     return 1; } int binSearch(int arr[], int low, int high, int key) {     int flag=-1;     int mid = (low + high) / 2;     if (low > high) {         flag= -1;     } else {         if (arr[mid] < key) {             flag= binSearch(arr, mid + 1, high, key);         } else if (arr[mid]>key) {             //比如要找的节点在下面这一层   那么这一层会返回下标上来 用flag接住嘛...             flag= binSearch(arr,low,mid-1,key);//又差一点忘记了用flag取接住返回值了         } else {             flag= mid;         }     }     return flag; } //ok============================== int binSearch2(int arr[], int low, int high, int key) {     int mid = (low + high) / 2;     if (low > high) {         return -1;     } else {         if (arr[mid] < key) {             return binSearch2(arr, mid + 1, high, key);         } else if (arr[mid]>key) {             return binSearch2(arr,low,mid-1,key);         } else {             return mid;         }     } } int binSearch3(int arr[],int start,int ends,int key){     int mid=-1;     while(start<=ends){         mid=(start+ends)/2;         if(arr[mid]<key){             start=mid+1;         }else if(arr[mid]>key){             ends=mid-1;         }else{             break;         }     }//上述循环结束后不一定就是 start>ends的  因为有break语句     if(start>ends){         mid=-1;     }     return mid; }       
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部