二分查找算法C

二分查找也属于顺序表查找范围,二分查找也称为折半查找。二分查找(有序)的时间复杂度为O(LogN)。

二分查找的基本思想是, 在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;若给定值小于中间记录的关键字,则在中间记录的左半区继续查找;若给 定值大于中间记录的关键字,则在中间记录的右半区继续查找。不断重复上述过程,直到找到为止。

从二分查找的定义我们可以看出,使用二分查找有两个前提条件:

1,待查找的列表必须有序。

2,必须使用线性表的顺序存储结构来存储数据。

二分法查找在针对大量有序排列的情况下发挥出很优越的效率,这里以最具规律性的数组为例,代码如下:

 1 #include <stdio.h>
 2 //二分查找
 3 int binary_search(const int c[], int l,int h,int key);
 4 void Display(int x);
 5 int a[]={15,8,100,46,22,56,34,79,98,66,200,11,300};
 6 int z=sizeof(a)/sizeof(int);
 7 int b[sizeof(a)/sizeof(int)];
 8 int t;
 9 int i;
10 int main(int argc, const char * argv[]) {
11
12     for (i=0; i<(sizeof(a)/sizeof(int)); i++) {
13         b[i]=a[i];
14     }
15     //printf("%ld\n",sizeof(a)/sizeof(int));
16
17     for(i=0;i<(sizeof(a)/sizeof(int));i++)
18     {
19         for(int j=i;j<(sizeof(a)/sizeof(int));j++)
20         {
21             if(b[i]>b[j]) {
22                 t=b[i];
23                 b[i]=b[j];
24                 b[j]=t;
25             }
26         }
27     }
28     printf("\n");
29     int m=0;
30     int n=z;
31     int w;
32     int x;
33     printf("请输入要查找的整数:");
34     scanf("%d",&x);
35     w=x;
36    // getchar();
37     int g;
38     g=binary_search(b, m, n, w);
39     Display(g);
40     return 0;
41 }
42
43 int binary_search(const int c[], int l,int h, int key){
44     while(l<= h)
45     {
46         int f = (l + h)/2;
47         if(c[f]== key)
48             return c[f] ;
49         //在左半边
50         else if(c[f] > key)
51             h = f - 1;
52         //在右半边
53         else
54             l = f + 1;
55     }
56     //没找到
57     return -1;
58 }
59
60 //打印结果
61 void Display(int x){
62     if (x!=-1) {
63         for(i=0;i<z;i++){
64             if (x==a[i]) {
65                 printf("所在位置:%d\n",i);
66             }
67         }
68     }
69
70     else{
71         printf("对不起,没有找到该数\n");
72     }
73 }

运行结果1:

请输入要查找的整数:200
所在位置:10
Program ended with exit code: 0

运行结果2:

请输入要查找的整数:500
对不起,没有找到该数
Program ended with exit code: 0

转载于:https://www.cnblogs.com/hecheng0314/p/4372662.html

基础算法之二分法查找相关推荐

  1. mysql实现二分法查找_算法之二分法查找

    二分法检索(binary search)又称折半检索,二分法检索的基本思想是设字典中的元素从小到大有序地存放在数组(array)中, 首先将给定值key与字典中间位置上元素的关键码(key)比较,如果 ...

  2. Java的知识点18——数组存储表格数据、冒泡排序的基础算法、冒泡排序的优化算法、二分法查找

    数组存储表格数据 package cn.dym08; import java.util.Arrays; public class Test09 {public static void main(Str ...

  3. java二分法找数数_JavaSE语言基础之数组二分法查找

    一.概念: 算法:当数据量很大适宜采用该方法.采用二分法查找时,数据需是排好序的. 基本思想:假设数据是按升序排序的,对于给定值key,从序列的中间位置k开始比较, 如果当前位置arr[k]值等于ke ...

  4. php折半查找算法,php二分法查找(也叫折半查找)算法 (数组必须是从小到大的)

    //php二分法查找(也叫折半查找)算法/ 数组必须是从小到大的 $abs=array(1,12,13,114,115,116,117,118); //z查找数组的最大下标 $hight = coun ...

  5. while循环random结合_Java 经典算法:二分法查找(循环和递归两种方式实现)

    一.二分法查找简介 当数组或者集合中存放的元素数量非常多的时候,想要跟踪具体某个元素的位置或者是否存在,常规方式是循环每一个元素直到找到要查找的元素为止.这样的查找方式效率非常低下,这个时候需要使用二 ...

  6. xtragrid 某个值 查找_Java 经典算法:二分法查找(循环和递归两种方式实现)

    一.二分法查找简介 当数组或者集合中存放的元素数量非常多的时候,想要跟踪具体某个元素的位置或者是否存在,常规方式是循环每一个元素直到找到要查找的元素为止.这样的查找方式效率非常低下,这个时候需要使用二 ...

  7. 【基础算法】二分法(二分答案,二分查找),三分法,Dinkelbach算法,算法详解+例题剖析

    目录 一 . 二分法 二分搜索得要求: 二分查找步骤: 二分答案: 玄学的二分(二分答案) 二 . 三分法 例题 三.01分数规划问题相关算法与题目讲解(二分法与Dinkelbach算法) 一 . 二 ...

  8. python二分法查找算法_排序算法和二分法查找

    请填充代码,使mySort()能使传入的参数按照从小到大的顺序显示出来. function mySort() { var tags = new Array(); for (var i = 0; i & ...

  9. 【java进阶06:数组】使用一维数组模拟栈数据结构 使用二维数组模拟酒店,酒店管理系统 Arrays工具类 冒泡排序算法、选择排序算法、二分法

    目录 数组 二维数组 总结 作业 Arrays工具类 数组 数组总结 及 静态初始化一维数组 /* Array:1.java语言中的数组是一种引用数据类型,不属于基本数据类型,数组的父类是Object ...

最新文章

  1. java 回滚异常_回滚事务并关闭抛出异常的连接
  2. 在 .NET 中创建对象的几种方式的对比
  3. WebService之初体验
  4. 201621123015《Java程序设计》第10周学习总结
  5. 一键安装mysql5.6_一键安装MySQL5.6.43脚本
  6. mysql启用keepalive_mysql主从之keepalive+MySQL高可用
  7. rsync 安装 配置 实例
  8. 小黄鸭c语言程序代码,新年的小黄鸭 - 题目 - Universal Online Judge
  9. [NOI导刊2010提高]黑匣子
  10. tidyverse —— dplyr包
  11. 投稿期刊:机械人机交互图形图象交叉学科
  12. Oracle10g expdp impdp
  13. iocomp iPlot使用说明13 Limits绘图界限
  14. 吉林大学超星MOOC学习通高级语言程序设计 C++ 实验01 顺序程序设计(2021级)
  15. JQuery实现防抖节流
  16. python简单操作excel
  17. WINDOW -- 给硬盘分盘以及合盘
  18. 腾讯万亿级 Elasticsearch
  19. 使用阿里云提供的短信服务发送短信(个人版)
  20. java通过aspose.words将两个word文档合并

热门文章

  1. jquery 停止事件冒泡方法
  2. 推荐实践:结对Review
  3. opencv图像配准_Milvus 实战 | 基于 Milvus 的图像查重系统
  4. 为dhcp服务器授权的作用,有关在 AD DS 中为 DHCP 服务器授权的详细信息
  5. 华为全面屏鸿蒙,华为5G概念新机:真全面屏+鸿蒙OS 这才是旗舰手机
  6. python的help怎么用_python的help函数如何使用
  7. 小米台灯底座接口很松_小米黑科技,AirPods和小米10 Pro伴侣,ZMI无线充蓝牙音箱体验...
  8. 计算机计算资源估计,项目时间管理中的计算题三点估算和关键路径法
  9. oracle fileline换行,Java中的换行符line.separator及file的separator
  10. python h5开发_从零搭建移动H5开发项目实战