1 //分治思想:将大问题拆成小问题逐一解决
2 //折半查找法:不断缩小一半查找的范围,知道达到目的,效率较高。 详情见:https://fishc.com.cn/thread-27964-1-1.html
3
4 //折半查找法(迭代)
5 #include<stdio.h>
6
7 int search(int str[], int n, int key);
8
9 int main(void)
10 {
11 int str[11] = {1,1,2,3,5,8,13,21,34,55,89};
12 int n,adr;
13
14 printf("请输入你需要查找数据的关键字:");
15 scanf("%d",&n);
16 printf("\n");
17
18 adr = search(str,11,n);
19 if(adr != -1)
20 {
21 printf("查找成功,关键字%d所在的位置是:%d\n",n,adr);
22 }
23 else
24 {
25 printf("查找失败!\n");
26 }
27
28 return 0;
29 }
30
31 int search(int str[], int n, int key)
32 {
33 int low,high,mid;
34
35 low = 0;
36 high = n-1;
37 mid = (low+high)/2;
38
39 while(low <= high)
40 {
41 if(key > str[mid])
42 {
43 low = mid+1;
44 mid = (low+high)/2;
45 }
46 if(key < str[mid])
47 {
48 high = mid-1;
49 mid = (low+high)/2;
50 }
51 if(key == str[mid])
52 {
53 return mid;
54 }
55 }
56
57 return -1;
58 }
59
60 //折半查找法(递归算法)
61 #include<stdio.h>
62
63 int search(int str[], int low, int high, int key);
64
65 int main(void)
66 {
67 int str[11] = {1,1,2,3,5,8,13,21,34,55,89};
68 int n,addr;
69
70 printf("请输入想要查找的关键字:");
71 scanf("%d",&n);
72
73 addr = search(str,0,10,n); //0是low 10是high
74 if(addr == -1)
75 printf("查找失败!\n");
76 else
77 printf("可喜可贺,可口可乐,你查找的关键字 %d 在位置 %d ",n,addr);
78
79 return 0;
80 }
81
82 int search(int str[], int low, int high, int key)
83 {
84 int mid;
85 if(low <= high)
86 {
87 mid = (low+high)/2;
88 if(str[mid] == key)
89 return mid;
90 else
91 {
92 if(key > str[mid])
93 search(str,mid+1,high,key);
94 else
95 search(str,low,mid-1,key);
96 }
97 }
98 else
99 return -1;
100 }

递归与分治思想:治思想 && 折半查找法(迭代 && 递归)的更多相关文章

  1. C语言折半查找法练习题冒泡排序

    C语言折半查找法练习题 折半查找法: 折半查找法是效率较高的一种查找方法.假设有已经按照从小到大的顺序排列好的五个整数num[0]~num[4],要查找的数是key,其基本思想是: 设查找数据的范围下 ...

  2. C语言数组之冒泡排序+折半查找法(二分查找)

    冒泡排序算法 将相邻的元素进行两两比较,大的向后"冒", 小的向前"赶". 口诀: N个数字来排队,两两比较小靠前 外层循环N-1(控制需要比较的轮数). 内层 ...

  3. 数据机构-折半查找法(二分查找法)-Python实现

    Python实现二分查找法(基于顺序表) class List: elem=[] #存储顺序表元素 last=-1 #设置初始为-1 SeqList = List() #创建一个顺序表 print(& ...

  4. c# 折半查找法实现代码

    ] { , , , , , , , , , , , , , , , , , , , }; , i; string j, k; , ); ) { k = String.Format("未找到{ ...

  5. 二分法(折半查找法)小demo

    使用此算法,必须有一个前提,那就是数组必须是有序的. package com.ly.tcwireless.international.test; import org.junit.Test; publ ...

  6. 先对数组排序,在进行折半查找(C++)

    第一步:输入15个整数 第二步:对这15个数进行排序 第三部:输入一个数,在后在排好序的数中进行折半查找,判断该数的位置 实现代码如下: 方法一: 选择排序法+循环折半查找法 #include< ...

  7. C语言之实现函数返回一个数组,以及选择排序,还有折半查找。这是同学的一个作业。。。

    作业的具体要求如下: 编写一个完整的程序,实现如下功能.(1)    输入10个无序的整数.(2)    用选择排序法将以上接收的10个无序整数按从大到小的顺序排序.(3)    要求任意输入一个整数 ...

  8. 查找->静态查找表->折半查找(有序表)

    文字描述 以有序表表示静态查找表时,可用折半查找算法查找指定元素. 折半查找过程是以处于区间中间位置记录的关键字和给定值比较,若相等,则查找成功,若不等,则缩小范围,直至新的区间中间位置记录的关键字等 ...

  9. InnoDB索引概述,二分查找法,平衡二叉树

    索引是应用程序设计和开发的一个重要方面.如果索引太多,应用的性能可能会受到影响:如果索引太少,对查询性能又会产生影响.要找到一个合适的平衡点,这对应用的性能至关重要. 如果知道数据的使用,从一开始就应 ...

  10. 选择、冒泡排序,二分查找法以及一些for循环的灵活运用

    import java.util.Arrays;//冒泡排序 public class Test { public static void main(String[] args) { int[] ar ...

随机推荐

  1. .net通用RSA加密工具类

    目前最流行的加密算法莫过于RSA了,以下是我们.net/.net core C#生成环境用的RSA加密工具类,在此分享给大家. using System; using System.IO; using ...

  2. Git:GitLab使用AD账户报错——remote: HTTP Basic: Access denied

    错误原因 当第一次使用AD账户进入GitLab时,需要进行密码重置,之后重新登录并进行克隆操作即可.

  3. Ubuntu新建Django工程错误:ModuleNotFoundError: No module named 'distutils.core'

    ubuntu18.04 默认没有安装 pip ,需要安装 python3-pip,即可解决 1 sudo apt-get install python3-pip 在shell脚本中输入以下命令: 1 ...

  4. 一些不错的VSCode设置和插件

    设置 同步设置 我们做的各项设置,不希望再到其他机器的时候还得再重新配置一次.VSCode中我们可以登陆微软账号或者GitHub账号,登陆后我们可以开启同步设置.开启设置同步,根据提示登陆即可. 允许 ...

  5. el-date-picker 在表单中宽度(width)问题

    在使用element-plus的日期选择组件 el-date-picker的时候,发现form表单内的日期选择框并不能跟el-input 一样把宽度撑满.而是要小一圈. 这样在排版中显得不太整齐,但是 ...

  6. MindSponge分子动力学模拟——软件架构(2023.08)

    技术背景 在前面一篇文章中,我们介绍了MindSponge的两种不同的安装与使用方法,让大家能够上手使用.这篇文章主要讲解MindSponge的软件架构,并且协同mindscience仓库讲解一下二者 ...

  7. 《Web安全基础》01. 基础知识

    @ 目录 1:概念名词 1.1:域名 1.2:DNS 1.3:网站开发语言 1.4:后门 1.5:Web 1.6:Web 相关安全漏洞 2:数据包 2.1:HTTP 2.2:HTTPS 2.3:请求数 ...

  8. 多重断言插件之pytest-assume的简单使用

    背景: pytest-assume是Pytest框架的一个扩展,它允许在单个测试用例中多次断言.通常情况下,当一个断言失败时,测试会立即停止执行,而pytest-assume允许我 们继续执行剩余的断 ...

  9. 在 RedHat Enterprise、CentOS 或 Fedora Linux 上安装 MongoDB

    在 RedHat Enterprise.CentOS 或 Fedora Linux 上安装 MongoDB 1.大纲 备注:采用yum安装后,所有进程将自动在/usr/bin下,如下的mongo.mo ...

  10. C# API复制/拷贝到剪辑板

    备忘 昨天在做一个程序的时候需要用到"剪辑板"功能, 可是死活引用不了"windows.forms"- (忘记添加引用了) 无奈只好去找了一个易语言的" ...