精华内容
下载资源
问答
  • 二分查找 C语言语言源代码 用递归写的 C语言入门经典代码 值得收藏
  • 二分查找 c语言

    2014-06-03 18:08:15
    c语言实现算法分析与设计的二分查找,代码短小精悍。
  • 二分查找 c语言实现

    2019-12-02 20:47:05
    提到二分查找,相信很多人都不陌生,大学学数据结构的时候老师都讲过,它是一种效率较高的查找方法,基于顺序存储结构的线性表,且要求表中元素按关键字有序排列。假设元素非递减排列,则常见的二分查找过程如下: ...

    提到二分查找,相信很多人都不陌生,大学学数据结构的时候老师都讲过,它是一种效率较高的查找方法,基于顺序存储结构的线性表,且要求表中元素按关键字有序排列。假设元素非递减排列,则常见的二分查找过程如下:

    1. 将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;
    2. 否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表;
    3. 否则进一步查找后一子表。
    4. 重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成

     

    //binary_search 
    
    
    #include <stdio.h>
    #include <stdlib.h>
    int binarySearch(int[], int, int);//二分查找函数
    
    int main()
    {
    	int myList[] = { 1, 3, 5, 7, 9 };            //原始数组
    	int len = sizeof(myList) / sizeof(myList[0]);        //元素个数
    
    	printf("%d\n", binarySearch(myList, 3, len));  // 1    找到返回1,,没有找到返回-1
    	printf("%d\n", binarySearch(myList, -1, len)); //-1
    	system("pause");
    	return 0;
    }
    
    int binarySearch(int list[], int item, int len)    //数组,要查找的元素,数组长度
    {
    	int low = 0;
    	int high = len;
    	while (low <= high)
    	{
    		int mid = (low + high) / 2;
    		int guess = list[mid];
    
    		if (guess == item)
    		{
    			return mid;
    		}
    		else if (guess > item)
    		{
    			high = mid - 1;
    		}
    		else
    		{
    			low = mid + 1;
    		}
    	}
    
    	return -1; //number not found
    }
    

     

    展开全文
  • C语言二分查找

    2015-10-25 14:43:01
    最经典的二分法查找数字,快速简便,但是要求已有的数据已经排序
  • 二分查找c语言

    2019-03-30 00:06:31
    二分法 ...二分查找的效率很高,可以查询很大的数据量,但他的前提是数据需要提前排好序。简单易懂的道理,给出数列1,2,3,4,5,6,7,要从中查出3,我们可以先找到中位数4>3,所以应该在...

    二分法
    在这里插入图片描述
    二分法是指对于区间[a,b]上连续不断且f(a)·f(b)<0的函数y=f(x),通过不断地把函数f(x)的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值的方法。

    二分查找
    二分查找的效率很高,可以查询很大的数据量,但他的前提是数据需要提前排好序。简单易懂的道理,给出数列1,2,3,4,5,6,7,要从中查出3,我们可以先找到中位数4>3,所以应该在左边查询,我们可以继续在1 2 3中查询,然后找到中位数2<3,所以应该在右边查询,这样就找到3=3;
    下面回顾一下高中用二分法求方程近似值的经典例题:利用计算器,求方程 x^2-2x-1=0 的一个近似解(精确到0.1)
    先画出大致的图形
    在这里插入图片描述
    设f(x)=x^2-2x-1
    f(2)=-1<0,f(3)=2>0;所以一个解在x=(2,3)之间,继续取2和3的中点x=2.5,得f(2.5)=0.25>0,所以解在(2,2.5)之间。
    同理不停求解可以得出x=2.4,同理可以求出另外一个解

    **给你数列1,2,3,4,5,6,7 你可以一眼看出来,那如果是给你一千万个数呢?这时候需要用到电脑。那么如何用c语言实现二分查找呢?**
    

    在这里插入图片描述

    /*所谓的二分查找法,其实是一种有序的查找方法,也称折半查找(Binary Search),如果是无序
    的则要先进行排序操作。基本思想是:目标值通过与中间元素比较,可分为三种情况: 
    第一种情况:目标值与中间元素相等,查找结束; 
    第二种情况:目标值比中间元素大,则把后半部分的中间元素与目标值比较; 
    第二种情况:目标值比中间元素小,则把前半部分的中间元素与目标值比较; 
    这三步一直循环,直到查找结束。*/
    #include <stdio.h>
    int Bin_Search(int *num,int cnt,int target)
    {
        int first = 0,last = cnt-1,mid;
        int counter = 0;
        while(first <= last)
        {
            counter ++;
            mid = (first + last) / 2;//确定中间元素   
            if(num[mid] > target)
            {
                last = mid-1; //mid已经交换过了,last往前移一位
            }
            else if(num[mid] < target)
            {
                first = mid+1;//mid已经交换过了,first往后移一位
            }   
            else //判断是否相等
            {
                printf("查找次数:%d\n",counter);
                return 1;
            }
        }
        printf("查找次数:%d\n",counter);
        return 0;
    }
    
    int main(void)
    {
        int flag = 0,target;
        int num[10] = {1,2,3,4,5,6,7,8,10};
        while(1)
        {
            printf("请输入您要查找的数字:\n");
            scanf("%d",&target);
            flag = Bin_Search(num,10,target);
            if(flag) printf("已经找到该数字!!\n");
            else printf("无该数字!!\n");    
        }
        return 0;
    }
    

    在这里插入图片描述

    展开全文
  • C语言开发的递归和非递归二分查找算法,具体内容详见代码
  • C语言 递归函数实现二分查找 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的...

    C语言 递归函数实现二分查找

    二分查找

    #include<stdio.h>
    int binary(int arr[], int min, int max, int key)
    //min,  max 分别表示数组的最左和最右的边界,key需要查找的数
    //二分查找必须为有序数组
    {
    	int mid = ( min + max ) / 2;          //数组中间值的下标
    	if(key == arr[mid])                    //如果key 等于 arr数组中间值,就返回该值的下标mid
    	{
    		return mid;
        }
        if(key < arr[mid])                    //如果key在数组左边部分,就继续调用binary函数,并且把max 移位到mid - 1处
        {
        	return binary(arr,min, mid - 1,key);
        }
        if(key > arr[mid])                   //如果key在数组右边部分,继续调用binary函数,并且把min移位到mid + 1处
        {
        	return binary(arr,mid + 1,max,key);
        }else                                // 如果在数组中查找不到key值,则返回 -1
        {
        	return -1;
        }
    }
    
    int main()
    {
    	int arr[] = {1, 3, 5, 7, 9, 10, 13,14, 17, 22, 33, 56, 78};
    	int len = sizeof(arr) / sizeof(int);       //获取数组长度
    	int key = 33;                          //查找的值
    	int ret = binary(arr,0,len -1,key);    //传参数,数组arr,数组最左边min = 0,最右边max = len(数组最右边)
    	printf("%d的下标是:%d\n",key,ret);
    	return 0;
    }
    
    执行结果

    在这里插入图片描述

    展开全文
  • 行为n(n不超过10000)个整数;第三行为一个整数m(m不超过50000),表示查询的个数;接下来m行每行一个整数k。 输出: 每个查询的输出占一行,如果k在序列中,输出Yes,否则输出No。 输入样例: 5 1 3 4 7 ...
  • c语言实现二分查找

    千次阅读 2018-08-05 23:42:23
    数组传入函数有2种方式,void f1(int arr[])或者void f2(int *arr) ,在函数内调用sizeof(arr),实际上测的是数组第一个元素占用的字节(因为数组名代表的是数组第一个元素的地址),所以在二分查找函数,要传入...
    #include<stdlib.h>
    #include<stdio.h>
    int BinarySearch(int *arr,int x,int length){
    	//printf("%d ",sizeof(arr));
    	//1 2 3 8 9
    	int left,right,mid;
    	left=0;
    	right=length-1;
    	while(left<=right){
    	mid=(left+right)/2;
    	if(x<arr[mid]){
    	right=mid-1;
    	}else if(x>arr[mid]){
    	left=mid+1;
    	}else{
    	return mid;
    	}
    	}
    	return -1;
    }
    
    void main(){
    	int arr[5]={1,2,3,8,9};
    	int length=sizeof(arr)/sizeof(arr[0]);
    	int r=BinarySearch(arr,8,length);
    	printf("%d",r);
    	system("pause");
    }

    注意:(1).arr实际上存放5个int类型的变量,占20字节,sizeof(arr)求的是总字节,总字节除以每一个元素占用的字节(sizeof(arr[0])),就是元素个数

    (2).数组传入函数有2种方式,void f1(int arr[])或者void f2(int *arr) ,在函数内调用sizeof(arr),实际上测的是数组第一个元素占用的字节(因为数组名代表的是数组第一个元素的地址),所以在二分查找函数,要传入length

    (3).当left>rigth,则说明找不到,注意当x>arr[mid],对应的是left=mid+1;当x<arr[mid],对应的是right=mid-1;

    展开全文
  • 用VC++6.0编译完成的Hash查找和二分查找C语言源文件关键字个数。支持注释部分。
  • 二分查找又叫折半查找,是一种简单又快速的查找算法;它对要查找的序列有两个要求:一是该序列必须是有序的,即该序列中所有元素都是按照大小关系排好顺序的,升序和降序都可以,二是该序列必须是顺序存储的. 算法...
  • 实现有序数组的二分查找 C语言

    千次阅读 2018-02-20 00:16:31
    写一个函数实现有序数组的二分查找#include int Binarysearch(int arr[],int key,int n ) // 数组 ,关键字,数组长度。 { int left = 0; int right = n-1; int mid = 0;
  • #include <stdio.h> #include <stdlib.h> #define MAXSIZE 10 #define NotFound 0 typedef int ElementType; typedef int Position; typedef struct LNode *List; struct LNode { ....
  • 算法(Algorithm),是程序设计的灵魂,它是利用系统的方法描述...本系列文章旨在用C语言解释算法的作用,分析包括排序算法、查找算法、迭代算法、递推算法、 递归算法、枚举算法、贪心算法、回溯算法、矩阵算法等。
  • C语言程序 已经过验证 放心使用 用问题请留言 谢谢参与 敬请意见
  • 二分查找算法(C语言实现)

    万次阅读 2018-03-19 15:48:27
    二分查找
  • int search(int* arr, int len, int t){ int i=0, j=len-1; int mid; while(i<j){ mid = (i+j)/2; if(arr[mid] < t){ i = mid+1; }else if(arr[mid]...
  • 本文主要介绍C语言二分查找算法,这里给大家详细介绍了什么是二分查找,并提供代码实例,需要的小伙伴可以参考下
  • 这一章节将讲解查找算法,包括顺序查找、二分查找。其中二分查找是通向编程高手路上的十大算法中的一种。 1 顺序查找 虫虫和东东是兄弟俩,经常一起做游戏。这次他们玩的是猜数字。东东口袋中有10颗玻璃球,东东抓了...
  • C语言实现递归的二分查找

    千次阅读 2018-03-29 16:59:54
    //二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法;//但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列;//二分查找,总体来说不能,唯一不好想的就是递归的这个...
  • C语言】PTA二分查找

    2020-09-04 10:59:10
    本题要求实现二分查找算法。 函数接口定义: Position BinarySearch( List L, ElementType X ); 其中List结构定义如下: typedef int Position; typedef struct LNode *List; struct LNode { ElementType Data...
  • c语言二分查找

    千次阅读 2019-01-02 13:33:29
    二分查找法  折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。它的基本思想是:(这里假设数组元素呈升序排列)将n个元素分成个数大致相同的...
  • A:你的新鞋子好炫酷,多少钱买的呀? B:价格在100~300之间,你猜一下咯,每次我只告诉你猜大了还是猜小了,直到你猜对为止,看看你能不能很快猜出来。... PS:二分查找的前提是数字序列必须有序哦! 越努力,越幸福!
  • 二分查找法(C语言

    千次阅读 2019-05-20 20:28:33
     //打印要查找元素的位置  break;  }  if(key>a[mid])  l=mid+1;  else   r=mid-1;  }  return 0; } int main(){  int i, a[100],n,key;  printf("请输入数组长度:\n");  scanf("%d",&...
  • c语言实现二分查找

    千次阅读 2019-05-26 11:38:05
    在一个有序数组中查找具体的某个数字 include<stdio.h> include<stdlib.h> int main() { int arr[]={1,2,3,4,5,6,7,8,9,10};...//进行二分查找 int left = 0; int right = sizeof(arr)...
  • 二分查找就是折半查找,叫法不一样而已,一个东西。 实现逻辑: LOOP { 判断arr[mid]是否等于目标? 是:查找成功;跳出循环 否:重新定义边界;继续循环 } 成功&失败时机 成功时机:break跳出循环,...
  • 二分查找算法》 1)将二分查找元素算法分为三个部分输入元素、查找元素、进行判断! 2)如果查找的元素在原始的元素中找不到话可以进行判定是否进行重新输入,查找,可以选择拒绝1 3)输入原始元素使用升序输入,...
  • 本题要求实现二分查找算法。 函数接口定义: Position BinarySearch( List L, ElementType X ); 其中List结构定义如下: typedef int Position; typedef struct LNode *List; struct LNode { ElementType ...
  • 二分查找c语言实现)

    千次阅读 2019-07-30 18:53:32
    本题要求实现二分查找算法。 函数接口定义: Position BinarySearch( List L, ElementType X ); 其中List结构定义如下: typedef int Position; typedef struct LNode *List; struct LNode { ElementType Data...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 61,001
精华内容 24,400
关键字:

二分查找c语言

c语言 订阅