递归折半查找

#include<iostream>
using namespace std;
int FindX(int*list, int left, int right, int X);
int main(){
int a[12] = { 1, 2, 5, 7, 12, 34, 35, 46, 57, 58, 67, 78 };
cout << FindX(a, 0, 11,67) << endl;
return 0;
}
int FindX(int*list, int left, int right, int X){
/*找到就返回下标,否则返回-1*/
if (right > left)
return -1;
int center = (right+left) / 2;
if (list[center] == X)
return center;
else if (X < list[center])
FindX(list, left, center - 1, X);
else{
FindX(list, center + 1, right, X);
}
}

时间: 2024-10-13 19:46:14

递归折半查找的相关文章

C++算法学习(1)--折半查找(递归和非递归实现)

1 #include "stdafx.h" 2 #include <iostream> 3 using namespace std; //折半查找(非递归调用) 6 bool binarySearch(int *arr,int low,int high,int key) 7 { 8 while (low<=high) {//必须为有= 9 int mid = (low + high) / 2; 10 if (arr[mid] > key) { 11 high =

折半查找的递归改写

[问题描述] 针对以非递增有序表表示的静态查找表,编写递归的折半查找算法. [输入形式]该静态查找表从下标1开始存放数据,存放数据按照非递增顺序,具体输入形式如下: 5   //输入元素个数 33 29 25 20 12 //按照非递增顺序连续输入多个数,每个数之间用一个空格隔开 29 //输入需要查找的数[输出形式]如果找到则输出该数据在查找表中的下标,如果找不到则输出0 如 查找29则会输出2[样例输入]5 33 29 25 20 12 29 [样例输出] 2 #include<stdio.

分治法-折半查找和二叉树的相关特性

4.3 折半查找 对于有序数组的查找来说,折半查找是一种性能卓越的算法.它通过比较查找健K和数组中间元素A[m]来完成查找工作.如果它们相等,算法结束.否则,如果K<A[m],就对数组的左半部分执行该操作,如果K>A[m],则对数组的右半部分执行该操作. 折半查找是基于递归思想的,但也可以以迭代方式实现. 代码实现: /** * 折半查找(递归方式实现) * @author xiaofeig * @since 2015.9.16 * @param array 查找的目标数组 * @param

Java实现折半查找(二分法)

利用Java实现折半查找 基本思路:while递归循环,不断判断a[middle]是否等于data,如果等于则跳出循环,返回索引值,如果不等,则进行二分处理,直至两者相等为止:其中通过count计数器记录查找次数,当count次数超过20次时视为元素不存在(此处有待优化) package test; /* * 二分法查找(折半查找) * TGmoving * */ public class halfSearch { public static int HalfSearch(int a[],int

二分查找or折半查找

1 package com.gxf.search; 2 3 /** 4 * 测试折半查找or二分查找 5 * @author xiangfei 6 * 7 */ 8 public class BiSearch { 9 10 /** 11 * 非递归实现,从第1个元素开始查找 12 * @param array 13 * @param k 14 * @return 0 查找失败 15 */ 16 public int biSearch(int array[], int k){ 17 int low

java 二分查找 - 折半查找算法

二分查找: 这个算法是比较简单的,容易理解的.这个算法是对有序的数组进行查找,所以想要使用这个算法那么 首先先要对数组进行排序. 其实有三个指针,开始指针,末尾指针,中间指针,来开始.折半查找. 步骤如下: 1.确定三个指针,start,end,middleIndex. 2.判断start<=end,如果满足,就执行这个方法,不满足,就返回,找不到. 3.在2的前提下,我们对其折半查找,middleIndex = start+end >> 1,取中间值. 4.判断中间位置的值和目标值是否

折半查找法的两种实现

折半查找法: 在有序表中,把待查找数据值与查找范围的中间元素值进行比较,会有三种情况出现: 1)     待查找数据值与中间元素值正好相等,则放回中间元素值的索引. 2)     待查找数据值比中间元素值小,则以整个查找范围的前半部分作为新的查找范围,执行1),直到找到相等的值. 3)     待查找数据值比中间元素值大,则以整个查找范围的后半部分作为新的查找范围,执行1),直到找到相等的值 4)     如果最后找不到相等的值,则返回错误提示信息. 按照二叉树来理解:中间值为二叉树的根,前半部

折半查找算法实现

折半查找是一种比较高效的查找方式,其基本思想是:在某个有序表中,取出中间的记录作为比较对象,如果要查找记录的关键码等于中间记录的关键码,则查找成功:若要查找记录的关键码小于中间记录的关键码,则在中间记录的左半区继续查找:若查找记录的关键码大于中间记录的关键码,则在中间记录的右半区继续查找.不断重复上述查找过程,直到查找成功,或有序表没有所要查找的记录,查找失败.实现过程有两种方式递归法和非递归法. 1.非递归法:查找成功则返回位置,查找失败则范围-1. /////////////////////

二分查找/折半查找算法

二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好:其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表.首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功:否则利用中间位置记录将表分成前.后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表.重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功. class Pr