zoukankan      html  css  js  c++  java
  • C 二分查找 递归与非递归

    #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;
    }
  • 相关阅读:
    求一个数的阶乘在 m 进制下末尾 0 的个数
    区间dp
    最长公共子序列变形
    学习stm32专区
    C/C++中static关键字详解
    ASP.NET调用Office Com组件权限设置
    TreeView控件
    SQL笔记(1)索引/触发器
    NPOI 1.2.5 教程
    SQL Povit
  • 原文地址:https://www.cnblogs.com/cart55free99/p/2980390.html
Copyright © 2011-2022 走看看