`

折半查找算法

阅读更多

在计算机科学中,折半搜索,也称二分查找算法、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。 复杂度分析 时间复杂度折半搜索每次把搜索区域减少一半,时间复杂度为。(n代表集合中元素的个数)空间复杂度 。虽以递归形式定义,但是尾递归,可改写为循环。

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<ctype.h>
#include<stdbool.h>


#define COMPARE(x,y) (((x) < (y)) ? -1 : ((x) == (y)) ? 0 : 1)

/*
int COMPARE(int x, int y)
{
    if(x < y) {
        return -1;
    } else if(x == y) {
        return 0;
    } else {
        return 1;
    }
}
*/


/* 非递归代码 */
int binsearch(int list[], int searchchnumm, int left, int right)
{
    int middle;
    while(left <= right) {
        middle = (right + left)/2;
        switch(COMPARE(list[middle], searchchnumm)) {
            case -1:
                left = middle + 1;
                break;
            case 0:
                return middle;
                break;
            case 1:
                right = middle -1;
                break;
            default:
                break;
            }
        }
        return -1;
}



/* 递归代码 */
int binsearch(int list[], int searchchnumm, int left, int right)
{
    int middle;
    if(left <= right) {
        middle = (left + right)/2;
        switch(COMPARE(list[middle], searchchnumm)) {
        case -1:
            return binsearch(list, searchchnumm, middle + 1, right);
            break;
        case 0:
            return middle;
            break;
        case 1:
            return binsearch(list, searchchnumm, left, middle - 1);
            break;
        default:
            break;
        }
    }
    return -1;
}

int main()
{
    int list[] = {2,4,5,1,-3,6,8,10,55,23};
    int searchnum = 5;
    int length;
    length = sizeof(list) / sizeof(int);
    printf("%d\n",length);
    printf("%d\n",binsearch(list,searchnum,0,length));
    return 0;    
}

 

分享到:
评论

相关推荐

    折半查找算法在顺序表中插入一个元素讲解.pdf

    折半查找算法在顺序表中插入一个元素讲解 折半查找算法是一种常用的查找算法,它可以在已经排好序的顺序表中快速地找到某个元素。下面我们来详细讲解折半查找算法在顺序表中插入一个元素的过程。 折半查找算法的...

    折半查找算法的改进和程序实现

    在众多的搜索算法中,折半查找算法因其简单高效而被广泛应用。然而,随着数据量的不断增长,传统折半查找算法的性能在某些场合下已不能完全满足需求。本文将针对这一问题,探讨折半查找算法的改进方法,并给出相应的...

    折半查找算法及matlab代码实现

    ### 折半查找算法及其MATLAB实现 #### 折半查找算法原理 折半查找算法是一种高效的搜索技术,尤其适用于已经排序的数组。该算法的基本思想是通过不断将搜索范围减半来查找目标值,因此也被称为二分查找。与线性...

    折半查找算法实现(C++).doc

    折半查找算法实现(C++) 折半查找算法是数据结构与算法中的一种重要查找方法,它可以通过数学方法计算其时间复杂度。在本文中,我们将详细介绍折半查找算法的实现,并提供 C++ 语言的代码实现。 一、折半查找算法...

    Java代码递归的折半查找算法

    ### Java代码递归的折半查找算法 #### 算法概述 递归版本的折半查找算法是一种高效的搜索技术,适用于已排序的数组。它的工作原理是将问题分解为更小的问题,直到找到目标值或确定目标值不存在于数组中为止。这种...

    静态查找表。实现有序表的折半查找算法

    ### 静态查找表与折半查找算法 在计算机科学中,静态查找表是一种用于存储数据并能够高效检索特定元素的数据结构。本篇文章将详细解释如何实现一个静态查找表,并利用折半查找算法(也称二分查找算法)来查询表中的...

    C语言实现折半查找算法

    ### C语言实现折半查找算法 #### 知识点概览 1. **折半查找算法的基本原理** 2. **C语言实现折半查找的关键步骤** 3. **代码解析及优化建议** 4. **时间复杂度分析** 5. **适用场景与限制条件** #### 折半查找...

    数据结构折半查找算法(C语言版)

    数据结构在计算机科学中占有重要地位,而折半查找算法是数据结构中一种高效搜索算法。本主题将深入探讨折半查找(Binary Search)算法,以及如何使用C语言实现这一算法。 折半查找,又称二分查找,是针对有序数组的...

    zhebanchazhao.rar_折半 查找_折半查找_折半查找算法_查找_查找算法

    以下是关于折半查找算法的详细解释和应用。 一、算法描述: 1. 确定数组的起始索引(left)和结束索引(right),通常初始时left为0,right为数组长度减1。 2. 如果left ,则执行以下步骤: - 计算中间索引mid,即...

    acm折半查找法参考代码

    在ACM(国际大学生程序设计竞赛)中,折半查找法(又称二分查找法)是一种常见的算法,它被广泛应用于处理有序数据。折半查找法利用了数据的有序性,通过每次比较中间元素来缩小查找范围,从而提高查找效率。下面...

    实例190 - 泛型化的折半查找法

    实例190 - 泛型化的折半查找法,就是关于如何利用泛型优化传统折半查找算法的一个实践示例。折半查找,也称为二分查找,是一种在有序数组中查找特定元素的搜索算法,其效率比线性查找高得多。 在Java中,传统的折半...

    汇编课程设计 实现折半查找

    接着,用户可以输入要查找的数值,程序通过折半查找算法返回该数值是否存在以及其位置。为了实现这一功能,我们需要掌握汇编语言中的输入/输出操作,如读取键盘输入和在屏幕上打印结果。 在实际的代码实现中,我们...

    折半查找的递归算法

    递归版本的折半查找算法与非递归版本的主要区别在于使用了函数调用自身的方式来实现查找区间对半分割的过程。递归版本通常更简洁,但可能会增加程序的调用栈开销。 #### 四、C语言实现 以下是一个使用C语言实现...

    java 快速排序 折半查找的界面实现 (递归与分治法)

    快速排序和折半查找是两种在计算机科学中广泛使用的算法,尤其在数据处理和搜索操作中扮演着重要角色。在Java编程中,这两种算法都可以通过递归和分治策略进行实现,以提高效率和可读性。下面我们将深入探讨这两个...

    运用非递归方式设计折半查找法的程序.rar_折半查找

    而“www.pudn.com.txt”可能是下载该资源的来源信息或者网站链接,对于理解折半查找算法本身不是必需的,但可以帮助追溯资料的出处。 为了更好地理解和学习折半查找,你可以关注以下几个关键点: 1. 数组必须是有序...

    查找问题(顺序查找法, 折半查找法,)基本思想

    查找问题(顺序查找法, 折半查找法,)基本思想:一列数放在数组a(1)---a(n)中,待查找的数放在x 中,把x与a数组中的元素从头到尾一一进行比较查找。用变量p表示a数组元素下标,p初值为1,使x与a(p)比较,如果x不等于a...

    递归折半查找法

    递归折半查找法基本的程序思想,初学者可以参考一下。

    折半查找(C++语言编写的)

    折半查找算法的实现与分析 折半查找是一种高效的查找算法,它可以在有序数组中快速地找到目标元素。下面将对折半查找算法的实现进行详细的分析和解释。 折半查找算法的原理 折半查找算法的基本思想是将查找空间...

    用折半查找法实现排序问题

    public int searchNumber(double num, boolean updown) {// 折半查找算法 int left = 0, right = Array.length - 1, middle = -1; while (left ) { middle = (left + right) / 2; if (num == Array[middle]) ...

Global site tag (gtag.js) - Google Analytics