递归与分治思想:治思想 && 折半查找法(迭代 && 递归)
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 }
递归与分治思想:治思想 && 折半查找法(迭代 && 递归)的更多相关文章
- C语言折半查找法练习题冒泡排序
C语言折半查找法练习题 折半查找法: 折半查找法是效率较高的一种查找方法.假设有已经按照从小到大的顺序排列好的五个整数num[0]~num[4],要查找的数是key,其基本思想是: 设查找数据的范围下 ...
- C语言数组之冒泡排序+折半查找法(二分查找)
冒泡排序算法 将相邻的元素进行两两比较,大的向后"冒", 小的向前"赶". 口诀: N个数字来排队,两两比较小靠前 外层循环N-1(控制需要比较的轮数). 内层 ...
- 数据机构-折半查找法(二分查找法)-Python实现
Python实现二分查找法(基于顺序表) class List: elem=[] #存储顺序表元素 last=-1 #设置初始为-1 SeqList = List() #创建一个顺序表 print(& ...
- c# 折半查找法实现代码
] { , , , , , , , , , , , , , , , , , , , }; , i; string j, k; , ); ) { k = String.Format("未找到{ ...
- 二分法(折半查找法)小demo
使用此算法,必须有一个前提,那就是数组必须是有序的. package com.ly.tcwireless.international.test; import org.junit.Test; publ ...
- 先对数组排序,在进行折半查找(C++)
第一步:输入15个整数 第二步:对这15个数进行排序 第三部:输入一个数,在后在排好序的数中进行折半查找,判断该数的位置 实现代码如下: 方法一: 选择排序法+循环折半查找法 #include< ...
- C语言之实现函数返回一个数组,以及选择排序,还有折半查找。这是同学的一个作业。。。
作业的具体要求如下: 编写一个完整的程序,实现如下功能.(1) 输入10个无序的整数.(2) 用选择排序法将以上接收的10个无序整数按从大到小的顺序排序.(3) 要求任意输入一个整数 ...
- 查找->静态查找表->折半查找(有序表)
文字描述 以有序表表示静态查找表时,可用折半查找算法查找指定元素. 折半查找过程是以处于区间中间位置记录的关键字和给定值比较,若相等,则查找成功,若不等,则缩小范围,直至新的区间中间位置记录的关键字等 ...
- InnoDB索引概述,二分查找法,平衡二叉树
索引是应用程序设计和开发的一个重要方面.如果索引太多,应用的性能可能会受到影响:如果索引太少,对查询性能又会产生影响.要找到一个合适的平衡点,这对应用的性能至关重要. 如果知道数据的使用,从一开始就应 ...
- 选择、冒泡排序,二分查找法以及一些for循环的灵活运用
import java.util.Arrays;//冒泡排序 public class Test { public static void main(String[] args) { int[] ar ...
随机推荐
- pandas 根据列的值选取所有行
原文链接:https://blog.csdn.net/changzoe/article/details/82348913 在其他论坛上看到的,原文链接如上所示.为方便记忆,原文如下所示: 选取等于某些 ...
- Unity的IPostprocessBuildWithReport:深入解析与实用案例
Unity IPostprocessBuildWithReport Unity IPostprocessBuildWithReport是Unity引擎中的一个非常有用的功能,它可以让开发者在构建项目后 ...
- 解决使用sqlalchemy时MySQL密码含有特殊字符问题
前言 当MySQL密码中含有特殊字符时,使用sqlalchemy大概率连不上,这时候就需要from urllib.parse import quote_plus as urlquote. 示例代码 f ...
- uniapp APP微信登录、支付、分享以及支付宝支付 实战踩坑记录
1.微信支付和支付宝支付 先上代码.封装好了的组件 html部分 <template> <view class="rows"> < ...
- [超详细]SpringBoot整合WebSocket
1. 什么是WebSocket? WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,它允许在浏览器和服务器之间进行实时的.双向的通信.相对于传统的基于请求和响应的 HTTP 协议, ...
- JDK17和JDK8在windows上同时安装方便切换
参考:https://blog.csdn.net/chencaw/article/details/121674479 一.JDK8的安装 1.电脑上已经安装了JDK8,安装主要步骤如下 (1)创建JA ...
- java类序列化和反序列化
参考:https://zhuanlan.zhihu.com/p/144535172?utm_id=0 https://blog.csdn.net/qq_42617455/article/details ...
- Text2Cypher:大语言模型驱动的图查询生成
话接上文<图技术在 LLM 下的应用:知识图谱驱动的大语言模型 Llama Index> 同大家简单介绍过 LLM 和图.知识图谱相关的结合,现在我来和大家分享下最新的成果.毕竟,从 GP ...
- ORACEL12C ORA-01033:ORACLE 正在初始化或关闭
问题:客户端报ORA-01033 原因:oracle12C CDB启动,但是可拔插的PDB实例未启动 解决办法: sqlplus / as sysdba--系统管理员登录 alter session ...
- 深入解析枚举(Enum):在程序设计中的应用与优势
深入解析枚举(Enum):在程序设计中的应用与优势 引言 在程序设计中,我们经常需要用到一组具名的常量,这些常量表示一些有限的离散状态或取值范围.例如,表示方向(上.下.左.右).星期几.性别等.为了 ...