zoukankan      html  css  js  c++  java
  • 递归和非递归的二分查找

    思路非常easy,代码凝视已标注

     

    #include <stdio.h>

     

    //递归二分查找

    int binarySearch(int*start,int *end,intfindData){

        if (start > end) {      // 递归边界条件

           return -1;

        }

        

        int *mid = start + (end - start)/2;     //依据中间值不断二分缩小待查元素所在范围

        if (findData == *mid) {

           return *mid;

        }else if(findData > *mid){

           return binarySearch(mid+ 1, end, findData);

        }else{

           return binarySearch(start,mid - 1, findData);

        }

    }

     

    //非递归二分查找

    int binarySearchRec(int*start,int *end,intfindData){

        if (start == NULL){

           return -1;

        }

        

        while (start <= end) {                 //递归使用边界条件终止递归,非递归使用循环条件来终止

           int *mid = start + (end - start)/2; // 求中间指针

           if (findData == *mid) {

               return *mid;

           }else if(findData > *mid){

               start = mid + 1;

           }else{

               end = mid - 1;

           }

        }

        

        return -1;

    }

     

    int main(intargc, const char* argv[])

    {

        int array[] = {2,4,6,8,10,14,15,19}; // num =8,二分查找的前提条件是元素有序的

        int len = sizeof(array)/sizeof(int);

        printf("递归二分查找binarySearch:%d ",binarySearch(array,array+ len - 1,100));

        printf("非递归二分查找binarySearchRec:%d ",binarySearch(array,array + len - 1,19));

        

        return 0;

    }

  • 相关阅读:
    JavaScript的函数(二)
    Python:os.walk()和os.path.walk()用法
    Python:代码单元、代码点介绍
    Python:如何去掉字符串中不需要的字符
    Python:更改字典的key
    Python:如何对字符串进行左、右、居中对齐
    Python:format()方法
    日常开发之缓存技术
    Web系统大规模并发——秒杀与抢购 秒杀系统优化与预防措施
    PHP之位运算符
  • 原文地址:https://www.cnblogs.com/llguanli/p/8449486.html
Copyright © 2011-2022 走看看