-
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实现折半查找(二分查找)的递归和非递归算法
2021-03-16 12:52:20Java实现折半查找(二分查找)的递归和非递归算法转 : 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; } }
运行结果:
-
java算法:折半查找(递归算法和非递归算法)
2021-02-25 19:36:35public 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:26else if(x[mid]) // 如果要查找的元素小于中点元素,继续查找数组前半部分 { return BinFind(v,x,low,mid-1); } else // 如果要查找的元素大于中点元素,继续查找数组后半部分 { return BinFind(v,x,mid+1... -
折半查找(二分查找)【和插值查找】(基本思想、递归和非递归算法)
2020-07-08 16:19:35折半查找的基本思想 折半查找也称为二分查找(Binary search),要求线性表中的节点必须己按关键字值的递增或递减顺序排列。...折半查找的非递归算法 int BinSearch(int str,int n,int k) { int lo -
数据结构——题目:试将折半查找的算法改写成递归算法。
2022-01-02 15:13:02算法思想:首先,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步... -
折半查找的递归与非递归算法
2018-08-07 09:43:35//折半查找只能用于有序的顺序表 public class BinarySearch { //递归算法 public static int binaryDiGuiSearch(int[] data,int low,int high,int x) { if(low>high){ return -1; ... -
递归法实现折半查找(二分查找)
2021-03-13 22:53:59递归法实现折半查找(二分查找) 分析 设立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:29n个元素。k次查找。 每次查找之后剩余的元素个数分别是:n、n/2、n/4、.... 、n/(2^k) n/(2^k)>=1 令n/(2^k)=1,则时间复杂度是O(log2n),以2为底n的对数。 -
小白算法积累——折半查找1#折半查找+递归算法
2020-05-05 17:03:29题目:写出折半查找的递归算法。初始调用时,low为1,high为ST.Length 关键字: 折半查找,递归算法 思路: 根据查找的起始位置和终止位置,将查找序列一分为二,判断所查找的关键字在哪一部分,然后用新的序列的... -
java 折半查找 非递归算法 递归算法
2017-05-20 11:13:49package 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= -
折半查找(递归实现和迭代实现)
2021-08-28 19:42:53折半查找时间复杂度为: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; } -
数据结构与算法----3.1 实现递归形式的折半查找算法
2021-05-21 18:18:04[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 ... -
折半查找算法的递归思想
2021-12-23 15:33:19否则,若k值小,则在表的前半部分继续利用折半查找法查找,若k值大,则在表的后半部分继续利用折半查找法查找。这样,经过一次关键字比较就缩小一半的查找区间,如此进行下去,直到查找到该关键字或查找失败。 . -
数据结构算法—递归实现折半查找算法
2021-12-16 14:57:29数据结构算法—递归实现折半查找算法 算法思想: 折半查找 适用于 有序表。 这个难度不大,注释也没写多少,有疑问私信我就行! 有序表的存储结构 typedef struct{ int a[30]; int length; }sqtable; 有序表... -
折半查找和递归折半查找详解(二分法查找,递归二分法查找)
2016-04-14 13:31:57算法:当数据量很大适宜采用该方法。采用二分法查找时,数据需是排好序的。(前提) 折半查找和递归折半查找详解(二分法查找,递归二分法查找) -
C++ 折半查找 (迭代与递归)
2020-03-14 20:08:09折半查找也称二分查找(Binary Search) 它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。 它充分利用了元素间的次序关系,采用分治策略,可在最坏的... -
折半查找的非递归算法和递归算法C++
2020-07-06 11:06:50//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... -
折半查找(递归与非递归)
2021-12-04 14:28:12【问题描述】针对以非递增有序表表示的静态查找表,编写递归的折半查找算法。 【输入形式】该静态查找表从下标1开始存放数据,存放数据按照非递增顺序,具体输入形式如下: 5 //输入元素个数 33 29 25 20 12 //... -
折半查找的递归实现和非递归实现(c++)
2021-05-24 04:26:49#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...