當前位置:首頁 » 操作系統 » 二分查找遞歸演算法

二分查找遞歸演算法

發布時間: 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. 二分查找使用迭代法和遞歸法誰更有效

迭代法,代碼的運行時間其實就是指令的運行時間,而遞歸函數調用的入棧出棧耗時在這種密集調用下是不可忽略的。

熱點內容
qt資源圖片編譯 發布:2024-11-15 16:59:26 瀏覽:665
編譯選項保護范圍最廣 發布:2024-11-15 16:57:47 瀏覽:605
c語言中的除號 發布:2024-11-15 16:51:09 瀏覽:215
安卓ops是什麼文件 發布:2024-11-15 16:32:18 瀏覽:927
雙線性插值演算法c 發布:2024-11-15 16:30:45 瀏覽:866
c語言和vc的區別 發布:2024-11-15 16:19:23 瀏覽:118
linux是免費的嗎 發布:2024-11-15 15:53:44 瀏覽:617
多控存儲 發布:2024-11-15 15:52:42 瀏覽:283
一年級數學分解演算法 發布:2024-11-15 15:41:08 瀏覽:411
安卓個人熱點怎麼分享 發布:2024-11-15 15:40:16 瀏覽:264