zoukankan      html  css  js  c++  java
  • 二分查找法

    分别用循环和递归实现二分查找

    #include <iostream>
    using namespace std;
    int binarysearchiteratively(int *data, int start, int end, int k){
        int l = start - 1;
        int r = end + 1;
        while (l + 1 != r){
            int middle = (l + r) / 2;
            if (data[middle] == k) return middle;
            else{
                if (data[middle] < k) l = middle;
                else{
                    r = middle;
                }
            }
        }
        return -1;
    }
    int binarysearchrecursively(int *data, int start, int end, int k){
        if (start>end) return -1;
        int middle = (start + end) / 2;
        if (data[middle] == k){
            return middle;
        }
        else{
            if (data[middle] < k){
                return binarysearchrecursively(data,middle+1,end,k);
            }
            else{
                return  binarysearchrecursively(data, start, middle - 1, k);
            }
        }
    
    }
    void test1(){
        int a[] = { 1, 2, 3 };
        int result1 = binarysearchiteratively(a, 0, 2, 1);
        int result2 = binarysearchrecursively(a, 0, 2, 1);
        if (result1 == 0 && result2 == 0){
            printf("%s
    ", "test1 succeeded");
        }
        else{
            printf("%s
    ", "test1 failed");
        }
    }
    void test2(){
        int a[] = { 1, 2, 3 };
        int result1 = binarysearchiteratively(a, 0, 2, 4);
        int result2 = binarysearchrecursively(a, 0, 2, 4);
        if (result1 == -1 && result2 == -1){
            printf("%s
    ", "test2 succeeded");
        }
        else{
            printf("%s
    ", "test2 failed");
        }
    }
    void test3(){
        int a[] = { 1 };
        int result1 = binarysearchiteratively(a, 0, 0, 1);
        int result2 = binarysearchrecursively(a, 0, 0, 1);
        if (result1 == 0 && result2 == 0){
            printf("%s
    ", "test3 succeeded");
        }
        else{
            printf("%s
    ", "test3 failed");
        }
    }
    void test4(){
        int a[] = { 1 };
        int result1 = binarysearchiteratively(a, 0, 0, 2);
        int result2 = binarysearchrecursively(a, 0, 0, 2);
        if (result1 == -1 && result2 == -1){
            printf("%s
    ", "test4 succeeded");
        }
        else{
            printf("%s
    ", "test4 failed");
        }
    }
    int main(){
        test1();
        test2();
        test3();
        test4();
        system("pause");
    }
  • 相关阅读:
    通道的理解
    系统安装-老毛桃
    ppt文字变图形
    关于android出现不能下载相关依赖包,解决办法
    关于字体图标的问题
    初始化小程序的第一个问题
    css盒子垂直居中的5种方式
    关于网页图标的引用--bootstrap4和ElementUI
    安装vue-cli缓慢问题
    基于SSM在线考试系统的核心功能,随机组卷的实现
  • 原文地址:https://www.cnblogs.com/hzmbbbb/p/3980590.html
Copyright © 2011-2022 走看看