C程序设计语言练习 第三章
3.3 else-if语句
折半查找,这里通过一个折半查找说明三路判定程序的用法。该函数用于判定已排序好的数组v中是否存在某个特定的值。数组v的元素必须以升序排列。如果v中包含x,则该函数返回x在v中的位置(介于0~n之间的一个整数),否则,该函数返回-1。
思路:在折半查找时,首先将输入值x与数组v的中间元素进行比较。如果x小于中间元素的值,则在该函数的前半部分查找,否则,在该数组的后半部分查找。在这两种情况下,下一步都是将x与所选部分的中间元素进行比较。这个过程一直进行下去,直到找到制定的值或者查找范围为空。
int bitsearch(int x,int v[], int n)
{
int low,high,mid;
low = 0;
high = n-1;
while (low <= high) {
mid = (low + high) / 2;
if(x < v[mid])
high = mid -1;
else if(x > v[mid])
low = mid + 1;
else
return mid;
}
return -1;
}
练习3-1
在上面有关折半查找的例子中,while循环语共执行了两次,其实只要一次就足够了(代价是将更多的测试在循环外执行)。重写该函数,使得在循环内部只执行一次。比较两者的运行时间。
对于三路判定以后或许可以这样改进。
int bitsearch2(int x,int v[], int n)
{
int low,high,mid;
low = 0;
high = n-1;
if( x<v[low] || x>v[high])
return -1;
mid = (low + high) / 2;
while (low <= high && x != v[mid]) {
if(x < v[mid])
high = mid -1;
else
low = mid + 1;
mid = (low + high) / 2;
}
if(x == v[mid])
return mid;
else
return -1;
}
C程序设计语言练习 第三章的更多相关文章
- 数据结构与算法分析——C语言描述 第三章的单链表
数据结构与算法分析--C语言描述 第三章的单链表 很基础的东西.走一遍流程.有人说学编程最简单最笨的方法就是把书上的代码敲一遍.这个我是头文件是照抄的..c源文件自己实现. list.h typede ...
- Java语言程序设计(基础篇) 第三章 选择
第三章 选择 3.8 计算身体质量指数 package com.chapter3; import java.util.Scanner; public class ComputeAndInterpret ...
- 《python语言程序设计》_第三章(数字函数、字符串和对象)
3.2_常见的Python函数 (1) abs()函数 求绝对值 (2) max(x1,x2,x3,....)求最大值 (3) min(x1,x2,x3,....)求最小值 (4) pow 返回a的b ...
- C语言数据结构——第三章 栈和队列
三.栈和队列 栈和队列是两种重要的线性结构.从数据结构的角度来看,栈和队列也是线性表,它的特殊性在于栈和队列的基本操作是线性表操作的子集,它们的操作相对于线性表来说是受到限制的,因此,可以称其为限定性 ...
- JavaScript高级程序设计学习笔记第三章--基本概念
一.标识符: 1.区分大小写 2.命名规则: 第一个字符必须是一个字母.下划线(_)或一个美元符号($) 其他字符可以是字母.下划线.美元符号或数字 标识符中的字母也可以包含扩展的 ASCII 或 U ...
- C语言学习第三章
写在课前,提醒自己写代码的时候一定要注意不能漏写符号!提醒自己写代码的时候一定要注意不能漏写符号!提醒自己写代码的时候一定要注意不能漏写符号! 今天主要学习掌握if...else条件结构,多重if条件 ...
- C语言_第三章
1.常量 1.整型常量 2.实型常量 1.十进制小数形式,由数字和小数点组成. 2.指数形式(以E或e代表以10 ...
- 【linux程序设计4th】第三章1
makefile .PHONY:clean all CC=gcc CFLAGS=-Wall -g ###replace your bin BIN=simple_write simple_read co ...
- C语言基础-第三章
C语句和数据输入/输出(函数) 1.printf();输出函数 2.getch();输入函数 3.scanf();格式输入 4.puts();字符串输出 5.gets();字符串输入
随机推荐
- python的协程,monkeyPatch
monkey patch 一般指运行时候进行动态替换. 基本上我们使用gevent,会在最开头的地方加入gevent.monkey.patch_all();把标准库中的thread/socket等给替 ...
- 使用apktool工具遇到 could not decode arsc file 的解决办法
I: Using Apktool -Beta9 on xx.apk I: Loading resource table... Exception in thread "main" ...
- c 判断字符是否为字母 (iswalpha example)
#include <stdio.h> #include <wctype.h> int main () { ; wchar_t str[] = L"C++"; ...
- slax linux的定制
由于数据结构教学的需要,需要用到linux,要求就是小,启动快,可定制性强,恰好slax正好满足要求,以下就是定制slax linux的过程记录: 什么是Slax Slax是一个基于Linux的Liv ...
- 基于docker的sqli-labs搭建
一键代码: curl https://files-cdn.cnblogs.com/files/kagari/sqli-labs.sh|bash https://files-cdn.cnblogs.co ...
- 字符串匹配 - hash
之前有写过一篇hash表,不过那是非常久远的时候了,应该是大一刚学一个学期的时候的成果,后来也就不那样写了,后来从xiaoxin那里学习了hash的写法,比较容易用也比较方便多hash,就这样. 分别 ...
- Linux -bash: redis-cli: command not found(亲测可行)
Linux 安装完redis单独用命令: ? 1 redis-server 报错: ? 1 -bash: redis-server: command not found 说明redis-server不 ...
- uwsgi+nginx部署django项目
1. 概念解析(wsgi协议,uwsgi协议,uWSGI) 参考:https://www.cnblogs.com/wspblog/p/8575101.html 1.1 现实世界的web请求: 1.2 ...
- Maven 3.6.1 下载及安装配置
Step1:Download You can download Maven3.6.1 from maven.apche.org , or from here. Step2:Unzip and add ...
- [drf]源码和序列化梳理
drf源码继承管理 # drf继承关系 View APIView as_view: 执行父类的as_view 调用dispatch dispatch init_request request.quer ...