二分查找及递归
来源:互联网 发布:windows 10sfc修复系统 编辑:程序博客网 时间:2024/06/19 01:19
原博客
#include<iostream>#include<stdlib.h>using namespace std;int BinarySearch(int arry[],int len,int value){ if(arry==NULL||len<=0) return -1; int start=0; int end=len-1; while(start<=end)//判断清是否有= { int mid=start+(end-start)/2; if(arry[mid]==value) return mid; else if(value<arry[mid]) end=mid-1; else start=mid+1; } return -1;}//改进思路:1, 不要传参,而是传引用调用,减少垃圾 2.使用模板int BinarySearchRecursion(int arry[],int value,int start,int end){ if(start>end) return -1; int mid=start+(end-start)/2; if(arry[mid]==value) return mid; else if(value<arry[mid]) return BinarySearchRecursion(arry,value,start,mid-1); else return BinarySearchRecursion(arry,value,mid+1,end);}int BinarySearchRecursion(int arry[],int len,int value){ //如果传入的数组为空或者数组长度<=0那么就返回-1,防御性编程 if(arry==NULL||len<=0) return -1; return BinarySearchRecursion(arry,value,0,len-1);}void main(){ int arry[]={1,2,3,4,5,6,7,8}; int len=sizeof(arry)/sizeof(int); int index=BinarySearch(arry,len,4); cout<<"index:"<<index<<endl; int index2=BinarySearchRecursion(arry,len,9); cout<<"index2:"<<index2<<endl; system("pause");}/////////////////////////////////////我们可以发现这个方法中的后三个参数value,start,end采用的是传值调用,只有第一个参数array是传地//址调用。我们知道在效率方面,传值调用要比传址调用来的低,因为传值调用要进行一次变量的拷贝//,而传址调用则是直接对这个变量进行操作,因此这里我们可以将后面的三个参数改为传址调用//改进后的代码int BinarySearchRecursion(int arry[],int &value,int &start,int &end){ if(start>end) return -1; int mid=start+(end-start)/2; if(arry[mid]==value) return mid; else if(value<arry[mid]) { end=mid-1; return BinarySearchRecursion(arry,value,start,end); } else { start=mid+1; return BinarySearchRecursion(arry,value,start,end); }}int BinarySearchRecursion(int arry[],int &len,int &value){ //\u5982\u679c\u4f20\u5165\u7684\u6570\u7ec4\u4e3a\u7a7a\u6216\u8005\u6570\u7ec4\u957f\u5ea6<=0\u90a3\u4e48\u5c31\u8fd4\u56de-1\u3002\u9632\u5fa1\u6027\u7f16\u7a0b if(arry==NULL||len<=0) return -1; int start=0; int end=len-1; return BinarySearchRecursion(arry,value,start,end);}void main(){ int arry[]={1,2,3,4,5,6,7,8}; int len=sizeof(arry)/sizeof(int); int especteNum1=4; int especteNum2=9; int index=BinarySearch(arry,len,especteNum1); cout<<"index:"<<index<<endl; int index2=BinarySearchRecursion(arry,len,especteNum2); cout<<"index2:"<<index2<<endl; system("pause");}
阅读全文
0 0
- 二分查找及递归
- Java实现数组二分查找及递归二分查找
- 二分查找的递归版本及非递归版本
- 实现二分查找算法的递归及非递归。
- 实现二分查找算法的递归及非递归
- 二分查找递归实现
- 二分查找 非递归
- 递归 -- 二分查找程序
- 递归实现二分查找
- 二分查找递归实现
- 二分查找,递归
- 递归二分查找。
- 递归—二分查找
- 非递归二分查找
- 二分查找----递归实现
- 递归形式二分查找
- 递归+二分查找
- 递归之二分查找
- 域名与网址
- 从Rxjava入门简书学习Java封装,以及设计模式
- 数据结构_动态顺序表
- Kotlin学习-前言
- Mybatis_ 返回List<Map<K,V>> 结构类型数据
- 二分查找及递归
- git知识
- 欢迎使用CSDN-markdown编辑器
- 排序算法
- 《剑指offer》刷题笔记(抽象建模能力):圆圈中最后剩下的数
- Redis3.0 配置文件说明
- 有关Oracle ORA-00904标识符无效
- Ubuntu编译安装llvm-clang
- checkpoint 进程----数据架构师的PostgreSQL修炼