鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: 小甲鱼

[技术交流] 折半查找法(递归实现)

[复制链接]
发表于 2015-8-9 10:16:11 | 显示全部楼层
谢谢小甲鱼
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-18 16:56:24 | 显示全部楼层
/*
**折半查找法--递归实现
**2016年9月18日 15:44:02
*/

#include <stdio.h>


int main()
{
        int data[15] = {1, 1, 2, 3, 5 ,8, 13, 21, 34, 55, 89, 144, 233, 377, 610};
        int e, index;
        printf("请输入待查找的元素:\n");
        scanf("%d", &e);
        index = half_search(data, e, 0, 14);       
        if(index != -1)
                printf("查找成功! 元素%d在数组中的下标为%d\n", e, index);
        else
                printf("查找失败! 元素%d不在数组中\n");
        return 0;
}

//折半查找法--递归实现
int half_search(int *data, int e, int low, int high)
{
        if(low > high)
                return -1;
        int mid = (low + high) / 2;
        if(e > data[mid])
                return half_search(data, e, mid + 1, high);
        else if(e < data[mid])
                return half_search(data, e, low, mid - 1);
        else
                return mid;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-7 21:36:48 | 显示全部楼层
来喵一眼递归实现。。。。。。。。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-9 13:30:00 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int fnBinarySearch(int*, int*, int);
  4. int iArray[10] = { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19 };

  5. int main(void) {
  6.         int iSearch = 0, iAnswer = 0;
  7.         int* piArray_Low = iArray, *piArray_High = iArray + 9;

  8.         printf("Search for:\n");
  9.         scanf_s("%d", &iSearch);

  10.         iAnswer = fnBinarySearch(piArray_Low, piArray_High, iSearch);
  11.         if (iAnswer > 0) printf("[%d]\n\n", iAnswer);
  12.         else printf("No Found!\n\n");

  13.         system("pause");
  14.         return 0;
  15. }

  16. int fnBinarySearch(int* piMin, int* piMax, int iSearch) {
  17.         int iOffset = (piMax - piMin) / 2, iGuess = *(piMin + iOffset), iTempOffset = 0;

  18.         if (iOffset == 0) return -1;

  19.         if (iGuess < iSearch) piMin = piMin + iOffset + 1;
  20.         else if (iGuess > iSearch) piMax = piMin + iOffset - 1;
  21.         else return -(iArray - (piMin + iOffset) - 1);
  22.         return fnBinarySearch(piMin, piMax, iSearch);
  23. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-16 14:58:34 | 显示全部楼层
  1. #include <iostream>
  2. using namespace std;
  3. int find(int a[],int left,int key,int right);
  4. int main(void)
  5. {
  6.     int num[]={1,2,3,4,5,6,7,8,9,10};
  7.     int index = find(num,0,10,10);

  8.     printf("%d\n",index);

  9.     system("pause");
  10.     return 0;
  11. }

  12. int find(int a[],int left,int key,int right)
  13. {
  14.     int mid;
  15.     mid = (left+right-1)/2;
  16.     if(left>right)
  17.         return -1;
  18.     if(a[mid]==key)
  19.         return mid;
  20.     if(a[mid]<key)
  21.         return find(a,left=mid+1,key,right);
  22.     if(a[mid]>key)
  23.         return find(a,left,key,right=mid-1);
  24.    
  25. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-8 19:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表