当前位置:首页 » 操作系统 » 二分查找递归算法

二分查找递归算法

发布时间: 2022-02-26 19:35:19

A. C语言 二分查找算法 用递归实现 我改动了一下

本人直接打出来的,并未在平台上编译运行过,所以可能会有语法错位,还请自行调试更改
#include<stdio.h>

int RecorBinarySearch(int a[], int, int, int);
int main(void)
{
int i=0, n, m, key;
int a[10000], c[10000];

scanf("%d", &n);
scanf("%d", &m);

printf("提示:输入%d个整数且必须按升序排列。\n", n);
for(i=0; i<n; i++){
scanf("%d", &a[i]);
}
printf("提示:输入%d个预查找的数。\n", m);
for(i=0; i<m; i++){
scanf("%d", &key);
c[i] = RecorBinarySearch(a, key, 0, n-1);
}
printf("提示:输出预查找的数在数组中的位置。(-1代表未找到)\n");
for(i=0; i<m; i++) {
printf("%d ", c[i]);
}
return 0;
}

int RecorBinarySearch(int a[], int key, int low, int high)
{
int nRet;
if(low > high)
nRet = -1;
else {
int mid = (high + low) / 2;
if(key == a[mid])
nRet = mid;
else if(key > a[mid])
nRet = RecorBinarySearch(a, key, mid+1, high);
else if(key < a[mid])
nRet = RecorBinarySearch(a, key, low, mid-1);
}
return nRet;
}

B. 二分查找的递归实现

//如下在VC6.0下编译通过。
//以后要注意仔细一点。
#include <stdio.h>
#include <stdlib.h>
#define N 11
#define COMPARE(x,y) (x)<(y)?-1:((x)==(y)?0:1)
int binsearch(int searchnum,int list[],int left,int right);
int main()
{
int list[N]={1,3,5,8,10,14,17,19,23,26,29};
int ele,conse;
printf("input a number searching for.");
scanf("%d",&ele);
conse=binsearch(ele,list,0,11);
if(conse==-1)
fprintf(stderr,"error,have no equal value.");
else
printf("%d is found in list.",ele) ;
return 0;
}
int binsearch(int searchnum,int list[],int left,int right)
{
int middle;
if(left<=right)
{
middle=(left+right)/2;
switch(COMPARE(list[middle],searchnum))
{
case-1: return binsearch(searchnum,list,middle+1,right);
case 0: return middle;
case 1: return binsearch(searchnum,list,left,middle-1);
}
}
return -1;
}

C. 二分法和二分检索,还有拆班查找各自之间有什么区别和联系啊有谁有二分检索的递归算法啊

http://..com/question/26674719.html

这个递归的二分查找是我写的,可以参考一下

D. java二分法查找的递归算法怎么实现

publicclass二分法递归查找{
publicstaticvoidmain(String[]args){

//定义数组,注意,二分查找数组必须是有序的数组!
int[]arr={1,3,5,7,9,11,13,15,17};

//接受查找后的返回值:索引值,如果没有则是-1;
//测试查找元素:9
inta=binary(arr,9,0,arr.length-1);
System.out.println("被查找数字索引位置在:"+a);
}
//参数列表依次为:被查找的数组,查找的数字,头索引,尾索引!
publicstaticintbinary(int[]arr,intkey,intstar,intend)//递归
{
//每次进来创建,中间索引值!
intmid=(star+end)/2;
//如果被查找数小于头,或者尾,或者头索引大于尾索引,则说明无该数,返回-1;
if(key<arr[star]||key>arr[end]||star>end){
return-1;
}
//如果中间值小于被查找数,则重新定义头索引移至中间+1位置,筛选掉一半数字!
if(arr[mid]<key){
//开始递归!
returnbinary(arr,key,mid+1,end);
//否则如果中间值大于被查找数,则重新尾索引移至中间-1位置,筛选掉一半数字!
}elseif(arr[mid]>key){
//开始递归!
returnbinary(arr,key,star,mid-1);
}else{
//否者就是找到了,返回该索引!
returnmid;
}
}
}

E. 二分查找算法

前提要求数据排好序,有递归和非递归版本
int binSearch(const int *Array,int start,int end,int key)
{
int left,right;
int mid;
left=start;
right=end;
while (left<=right) { /注释中为递归算法,执行效率低,不推荐
mid=(left+right)/2;
/* if (key<Array[mid]) {
return(binSearch(Array,left,mid,key));
}
else if(key>Array[mid]){
return (binSearch(Array,mid+1,right,key));
}
else
return mid;
*/
if (key<Array[mid]) {
right=mid-1;
}
else if(key>Array[mid]){
left=mid+1;
}
else
return mid;
}
return -1;
}

F. 编写一个在有序表中二分查找给定关键字记录的递归算法 (C语言)

其实这个书本上可以找到的,逻辑也比较容易实现。我写一下主要的逻辑吧。
int Serch(int * a, int low, int high. int key)
{
if (low <= high)
{

int mid = ( high - low) / 2 + low;
if (key == a[mid]) // 找到了

return mid;
else if (key < a[mid]) // 比中间值小,向前找

Serch(a, low, mid - 1, key);
else // 向后找

Serch(a, mid + 1, high, key);

}
return -1; // 没找到

}

G. 《编程珠玑》一道练习题:二分查找的递归算法,要求函数名为int binarysearch(DataType x[], int n)。

int binarysearch(DataType x[],int n)
{
int low = 0;
int high = n-1,mid;
while(low<high)
{
mid = (low + high)/2;
if(x[mid]<n) low = mid+1;
else if(x[mid]>n) high = mid -1;
else
return mid;
}
return -1;
}

H. 如下为二分查找的非递归算法,试将其填写完整。

递归算法是一种分而治之的方法,简单的说就是调用自己本身;能把复杂的问题化为简单来解决;但是执行的效率比较低,所以一般分析问题用递归,实际解决问题用非递归。

I. 二分查找使用迭代法和递归法谁更有效

迭代法,代码的运行时间其实就是指令的运行时间,而递归函数调用的入栈出栈耗时在这种密集调用下是不可忽略的。

热点内容
狂三脚本 发布:2024-11-15 17:31:38 浏览:871
附近存储柜 发布:2024-11-15 17:15:17 浏览:451
王选解决汉字存储问题 发布:2024-11-15 17:15:11 浏览:659
球球大作战安卓为什么不能玩哪些模式 发布:2024-11-15 17:14:26 浏览:995
存储器讲课 发布:2024-11-15 17:14:12 浏览:195
安卓充电头怎么称呼 发布:2024-11-15 17:11:17 浏览:445
猎人手游源码 发布:2024-11-15 17:09:28 浏览:432
qt资源图片编译 发布:2024-11-15 16:59:26 浏览:665
编译选项保护范围最广 发布:2024-11-15 16:57:47 浏览:605
c语言中的除号 发布:2024-11-15 16:51:09 浏览:216