精华内容
下载资源
问答
  • 递归算法 折半查找
    2021-07-10 19:59:25

    (一)递归算法 折半查找 BinarySearch(函数命名了解大驼峰命名 法)

    目的    节省时间在一组有序数列中查找一个数。通过查找中间值进行不断比较。
    

    代码如下:

    int BinarySEarch(int*a,/*数组*/,intx/*想要传入的数组*/,int left /*最左边的数字*/,int right)
    {
    int middle;
    if(left<=right)/*判断数组的左边的数字和右边的数字*/
    {
    middle = (left<=right)
    {
    middle = (left+right)/2;/*(找到中间数字)*/
    if(a[middle]==x)return middle ;
    else if (a[middle]<x) left = middle+1;/*对三个结果的判断*/
    else if (a[middle]>x)right=middle-1;
    return BinarySearch(a,x,left,right);
    }
    return -1;/*返回错误信息*/
    }
    
    }
    

    通过判断中间值是否和所需要的数字相等,知道比对到于自己相同,来减少一个和一个的比较次数从而减少程序执行时间.

    更多相关内容
  • 折半查找递归算法

    2015-11-02 09:54:24
    折半查找递归算法,非常实用,可以实现的C语言程序
  • Java实现折半查找(二分查找)的递归和非递归算法转 : http://wintys.blog.51cto.com/425414/94051/***名称:BinarySearch*功能:实现了折半查找(二分查找)的递归和非递归算法.*说明:* 1、要求所查找的数组已有序,...

    Java实现折半查找(二分查找)的递归和非递归算法

    转 : http://wintys.blog.51cto.com/425414/94051

    /**

    *名称:BinarySearch

    *功能:实现了折半查找(二分查找)的递归和非递归算法.

    *说明:

    *     1、要求所查找的数组已有序,并且其中元素已实现Comparable接口,如Integer、String等.

    *    2、非递归查找使用search();,递归查找使用searchRecursively();

    *

    *本程序仅供编程学习参考

    *

    *@author:   Winty

    *@date:     2008-8-11

    *@email:    wintys@gmail.com

    */

    class BinarySearch> {

    private T[]  data;//要排序的数据

    public BinarySearch(T[] data){

    this.data = data;

    }

    public int search(T key){

    int low;

    int high;

    int mid;

    if(data == null)

    return -1;

    low = 0;

    high = data.length - 1;

    while(low <= high){

    mid = (low + high) / 2;

    System.out.println("mid " + mid + " mid value:" + data[mid]);///

    if(key.compareTo(data[mid]) < 0){

    high = mid - 1;

    }else if(key.compareTo(data[mid]) > 0){

    &n

    相关文档:

    import java.awt.*;

    import java.awt.event.*;

    //俄罗斯方块类

    public class ERS_Block extends Frame{

    public static boolean isPlay=false;

    public static int level=1,score=0;

    public static TextField scoreField,levelField;

    public static MyTimer timer;

    Ga ......

    public class InsertBlobData {

    Connection con = null;

    /**

    * @param args

    * @throws Exception

    */

    public static void main(String[] args) throws Exception {

    // TODO Auto-generated method stub

    InsertBlobData data = new InsertBlobData();

    data.insertBlogInfo("002jpg", "sdsdfdf", "2007-02-1 ......

    对枚举类型印象大多来自于C

    语言,在

    C

    语言中,枚举类型是一个

    HardCode

    (硬编码)类型,其使用价值并不大。因此,在

    Java 5

    之前,枚举是被抛弃的。然而

    Java 5

    以后的发现版本开始对枚举进行支持,枚举的引入给

    Java

    世界带来了争议。

    笔者比较赞同引入枚举,作为一门通用的静态编程语言,应该是 ......

    0

    .引言

    在ChinaITLAB

    导师制辅导中,笔者发现问得最多的问题莫过于"

    如何学习编程?Java

    该如何学习?"

    。类似的问题回答多了,难免会感觉厌烦,就萌生了写下本文的想法。到时候再有人问起类似的问题,我可以告诉他(她),请你去看看《Java

    学习之路》。拜读过台湾蔡学镛先生的《Java

    夜未眠》,有 ......

    public static void replaceString(String a,String b,String c){

    System.out.println(a);

    String result = a.replaceAll("(?i)"+b, c); //大小写不敏感

    ......

    展开全文
  • 递归折半查找算法

    千次阅读 2019-02-19 10:02:08
    问题一:递归折半查找算法 注意:折半查找有一个条件,数据必须是有顺序性的,不然折半查找毫无意义; 原问题:有一数组A[10],里面存放了十个整数,顺序递增。任意输入一个n(位于数组里外均可),如果n数与数组...

    问题一:递归的折半查找算法
    注意:折半查找有一个条件,数据必须是有顺序性的,不然折半查找毫无意义;
    原问题:有一数组A[10],里面存放了十个整数,顺序递增。任意输入一个n(位于数组里外均可),如果n数与数组,则显示n位于数组中的位置,如果n不属于数组,则显示错误;要求用递归的方法实现折半查找;
    扩展:适用于输入所有顺序递增数据实现折半查找。
    实验代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    int zhebanchazhao(int a[],int n,int m,int low,int high);
    int main(int argc, char *argv[]) {
    /*折半查找原理较简单,通过所有数据的折半,然后比较,继续以此递归,直到找出符合要求的数据即可,否则该数据不存在,输出错误!
     当然,折半查找有一个条件:本身的数据必须是有序的,不然查找毫无意义;
    */ 
     int n;
     printf("请输入待查找数据的长度:"); 
     scanf("%d",&n);
     int a[n],i,m;
     printf("请输入待查找的数字:");
     scanf("%d",&m);
     printf("依次输入待查找数据: "); 
     for(i=0;i<n;i++){
      scanf("%d",&a[i]);
     }
     int q;
     q=zhebanchazhao(a,n,m,0,n-1);
     if(q!=-1){
     printf("该数字位于全部数据的第 %d 位",q+1);
     }else{
      printf("该数字不在该数据当中;"); 
     }
     return 0;
    }
    //不行,方法的思路就有问题; 
     //int zhebanchazhao(int a[],int n,int m){     //m是待查数字,m在整个整个过程中是不会发生改变的; 
     // if(a[n/2]==m){
     //  return n/2;
     // }else if(a[n/2]<m){
     //  int m=n/2; 
     //  zhebanchazhao(a,n+n/2,m);
     // }else if(a[n/2]>m){
     //  zhebanchazhao(a,n/2,m);
     // } 
     //}
    /*第一次出现的问题是当数据较大时,数据末端的数字查查无结果;
    原因:我的递归中n+n/2有问题;这样导致比较对象不在数据范围中,数组越界;
    */
     int zhebanchazhao(int a[],int n,int m,int low,int high){ 
     while(low<=high){
      int s=(low+high)/2;
      if(m==a[s]){
       return s;
      }else if(m>a[s]){
       low=s+1;
       return zhebanchazhao(a,n,m,low,high);
      }else if(m<a[s]){
       high=s-1;
       return zhebanchazhao(a,n,m,low,high);
      }
     } 
     if(low>high){
      return -1;
     } 
    }

    运行结果:

    展开全文
  • public class biSearch {/*** @param args*//*折半查找--当查找表是有序表时,可采用折半查找;基本思想:在有序表中,取中间元素作为比较对象,若给定值K与中间记录关键字相等,则查找成功;若给定值K小于中间记录的...

    package Ceshi;

    public class biSearch {

    /**

    * @param args

    */

    /*

    折半查找--当查找表是有序表时,可采用折半查找;

    基本思想:在有序表中,取中间元素作为比较对象,若给定值K与中间记录关键字相等,则查找成功;

    若给定值K小于中间记录的关键字,则在表的左半区继续查找;

    若给定值K大于中间记录的关键字,则在表的右半区继续查找,不断重复,直到查找成功/失败。

    */

    //折半查找非递归算法

    //查询成功返回该对象的下标序号,失败时返回-1。

    int BiSearch(int r[],int n,int k)

    {

    int low=0;

    int high=n-1;

    while(low<=high)

    {

    int mid=(low+high)/2;

    if(r[mid]==k)

    return mid;

    else

    if(r[mid]

    low=mid+1;

    else

    high=mid-1;

    }

    return -1;

    }

    //折半查找递归算法

    //查询成功返回该对象的下标序号,失败时返回-1。

    int BiSearch2(int r[],int low,int high,int k)

    {

    if(low>high)

    return -1;

    else

    {

    int mid=(low+high)/2;

    if(r[mid]==k)

    return mid;

    else

    if(r[mid]

    return BiSearch2(r,mid+1,high,k);

    else

    return BiSearch2(r,low,mid-1,k);

    }

    }

    public static void main(String[] args) {

    biSearch bs=new biSearch();

    int r[]={1,2,3,4,5};

    System.out.println(bs.BiSearch(r,5,5));

    System.out.println(bs.BiSearch2(r,1,5,5));

    }

    }

    文献来源:

    展开全文
  • 折半查找递归做法)

    千次阅读 2020-11-30 13:17:26
    else if(x[mid]) // 如果要查找的元素小于中点元素,继续查找数组前半部分 { return BinFind(v,x,low,mid-1); } else // 如果要查找的元素大于中点元素,继续查找数组后半部分 { return BinFind(v,x,mid+1...
  • 折半查找的基本思想 折半查找也称为二分查找(Binary search),要求线性表中的节点必须己按关键字值的递增或递减顺序排列。...折半查找的非递归算法 int BinSearch(int str,int n,int k) { int lo
  • 算法思想:首先,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步...
  • 折半查找的递归与非递归算法

    千次阅读 2018-08-07 09:43:35
    //折半查找只能用于有序的顺序表 public class BinarySearch {  //递归算法  public static int binaryDiGuiSearch(int[] data,int low,int high,int x) {  if(low&gt;high){  return -1;  ...
  • 递归法实现折半查找(二分查找) 分析 设立low代表数组最小端的数组下标,high代表数组最大端的数组下标,mid代表数组中间值的数组下标 查询数字number与mid进行比较,有四种情况: 1、number=数组[mid],则找到...
  • 递归实现折半查找算法(C语言)

    万次阅读 多人点赞 2019-05-01 14:04:40
    递归实现折半查找 折半查找顾明思议,就是一半一半的查找,不过前提必须是一个有序的序列,这里我才用了整型数组。 函数必须传入4个参数 int binsearch(int a[], int key, int low, int high) a[] :要进行查找的数组...
  • 折半查找算法算法复杂度

    千次阅读 2021-07-10 10:43:29
    n个元素。k次查找。 每次查找之后剩余的元素个数分别是:n、n/2、n/4、.... 、n/(2^k) n/(2^k)>=1 令n/(2^k)=1,则时间复杂度是O(log2n),以2为底n的对数。
  • 题目:写出折半查找递归算法。初始调用时,low为1,high为ST.Length 关键字: 折半查找递归算法 思路: 根据查找的起始位置和终止位置,将查找序列一分为二,判断所查找的关键字在哪一部分,然后用新的序列的...
  • java 折半查找递归算法 递归算法

    千次阅读 2017-05-20 11:13:49
    package datastruct.find; public class Binary... //方法一:非递归折半查找: private static void binarySearch(int a[],int k) { int low=0; int high=a.length-1; int mid; while (low) { mid=
  • 折半查找时间复杂度为:O(logn) 实现代码: #include<iostream> using namespace std; //折半查找 //递归实现 int BinSearch(int* nums,int value,int low,int high) { if (low > high) return -1; ...
  • 折半查找递归

    2018-11-21 16:43:12
    // // main.cpp // ni // // Created by 申凡 on 2018/11/21. ...// #include using namespace std;...int BinarySearchRecur... cout 请输入想要查找的数字" ; cin >> k; cout (a, 0, n - 1, k); return 0; }
  • [c++]代码库#include using namespace std;typedef int KeyType;struct ElemType {KeyType key;};struct SList {ElemType *r;int length;};int Search_Bin(SList &...//有序表的折半查找算法bool ListCreate(SList ...
  • 否则,若k值小,则在表的前半部分继续利用折半查找法查找,若k值大,则在表的后半部分继续利用折半查找法查找。这样,经过一次关键字比较就缩小一半的查找区间,如此进行下去,直到查找到该关键字或查找失败。 .
  • 数据结构算法递归实现折半查找算法 算法思想: 折半查找 适用于 有序表。 这个难度不大,注释也没写多少,有疑问私信我就行! 有序表的存储结构 typedef struct{ int a[30]; int length; }sqtable; 有序表...
  • 算法:当数据量很大适宜采用该方法。采用二分法查找时,数据需是排好序的。(前提) 折半查找递归折半查找详解(二分法查找,递归二分法查找)
  • 折半查找也称二分查找(Binary Search) 它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。 它充分利用了元素间的次序关系,采用分治策略,可在最坏的...
  • //a[]是数组,n是数组长度,key是查找的关键字 int BinSearch(int a[],int n,int key) { int l=0,r=n-1; int mid; while(l<=r){ mid=(1+r)/2; if(a[mid]==key) return mid; else if(a[mid]<key) l=...
  • 折半查找递归算法和非递归

    千次阅读 2016-11-24 19:19:56
    设计一个算法,实现折半查找,很简单的问题。在这里列举下递归和非递归 递归实现 #include #include #include #include #include #include #include using namespace std; int n,a[105]; int Search_Bin...
  • 【问题描述】针对以非递增有序表表示的静态查找表,编写递归折半查找算法。 【输入形式】该静态查找表从下标1开始存放数据,存放数据按照非递增顺序,具体输入形式如下: 5 //输入元素个数 33 29 25 20 12 //...
  • #include//折半查找 非递归实现int BinSearch1(int r[],int n,int k){int mid,low =1,high =n;while (low <=high){mid =(low + high)/2;if(kelse if(k>r[mid])low =mid +1;...}//折半查找递归实现int ...
  • 折半查找法(C语言实现)递归

    千次阅读 多人点赞 2019-11-25 16:31:10
    二分查找(又称为折半查找)是在有序序列中查找比较多的查找算法,基本思路:设有一个从小到大的序列,取中间的元素m进行比较,如果等于需要查找的元素x则返回元素m的下标,若x大于m则再从右边的区间查找,若x小于m...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,722
精华内容 5,488
关键字:

折半查找的递归算法

友情链接: Waterdll.zip