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

折半查找法:
折半查找法是效率较高的一种查找方法。假设有已经按照从小到大的顺序排列好的五个整数num[0]~num[4],要查找的数是key,其基本思想是: 设查找数据的范围下限为low=0,上限为high=5,求中点mid=(low+high)/2,用key与中点元素a[mid]比较,若key==a[mid],即找到,停止查找;否则,若key>a[mid],替换下限low=mid+1,到下半段继续查找;若key<a[mid],换上限high=mid-1,到上半段继续查找;如此重复前面的过程直到找到或者low>high为止。如果low>high,说明没有此数,打印找不到信息,程序结束。
代码实现:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
/*
定义一个折半查找法函数,查找一个数组元素无顺序的数组中的某个值的角标.
*/
#include <stdio.h>
/**
* 冒泡排序函数
*
* @param arr 需要被排序的数组名
* @param len 数组的长度
*/
voidbubbleSort(intarr[],intlen){
for(inti=0;i<len-1;i++){
for(intj=0;j<len-1-i;j++){
if(arr[j]>arr[j+1]){
arr[j]=arr[j]^arr[j+1];
arr[j+1]=arr[j]^arr[j+1];
arr[j]=arr[j]^arr[j+1];
}
}
}
}
/**
* 折半查找函数
*
* @param arr 要被查找的数组名
* @param len 要呗查找的数组的长度
* @param key 要查找的值
*
* @return 如果查到则返回角标,查不到返回-1
*/
intCzhao(intarr[],intlen,intkey){
//定义三个变量,low表示最小角标,high表示最大角标,mid假设为要查找的数的角标
intlow=0,high=len-1,mid;
while(low<=high){
//计算mid的值,也就是计算角标
mid=(low+high)/2;
//判断key和arr[mid]的值
if(key>arr[mid]){
//当要查的值大于中间值,说明要查的值在中间值和最大值之间,则最小角标等于中间角标+1后继续计算新的mid值
low=mid+1;
}elseif(key<arr[mid]){
//当要查的值小于中间值,说明要查的值在最小值和中间值之间,则最大角标等于中间角标-1后继续计算新的mid值
high=mid-1;
}else{
//当要查的值等于中间值,则直接返回角标
returnmid;
}
}
//查找不到,返回-1
return-1;
}
intmain(intargc,constchar*argv[]){
//定义一个长度为5的int类型的数组,并赋值
intnum[5]={3,1,5,7,5};
//调用冒泡排序函数,对数组进行排序
bubbleSort(num,5);
//调用折半查找函数,并将返回值赋值给n
intn=Czhao(num,5,5);
//打印角标
printf("要查找的元素的角标为:%d\n",n);
return0;
}
|
C语言折半查找法练习题冒泡排序的更多相关文章
- C语言二分查找法
参考了C语言中折半查找法(二分法)的实现 二分查找算法(C语言实现) 先附上代码 #include<stdio.h> int BinSearch(int arr[],int len,int ...
- C语言数组之冒泡排序+折半查找法(二分查找)
冒泡排序算法 将相邻的元素进行两两比较,大的向后"冒", 小的向前"赶". 口诀: N个数字来排队,两两比较小靠前 外层循环N-1(控制需要比较的轮数). 内层 ...
- c语言折半查找
折半查找又称为二分查找,它的前提是线性表中的记录必须是有序的(通常从小到大有序),线性表必须采用顺序存储. 折半查找的基本思想是 : 在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等 ...
- 数据机构-折半查找法(二分查找法)-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语言-折半查找的函数
void search(int n,int num[],char name[N][10]) { int top,bottom,middle,location,flag; top=0; bottom=N ...
- 选择、冒泡排序,二分查找法以及一些for循环的灵活运用
import java.util.Arrays;//冒泡排序 public class Test { public static void main(String[] args) { int[] ar ...
- C语言之实现函数返回一个数组,以及选择排序,还有折半查找。这是同学的一个作业。。。
作业的具体要求如下: 编写一个完整的程序,实现如下功能.(1) 输入10个无序的整数.(2) 用选择排序法将以上接收的10个无序整数按从大到小的顺序排序.(3) 要求任意输入一个整数 ...
随机推荐
- 五分钟学Java:一篇文章搞懂spring和springMVC
原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 本文思维导图 什么是Spring,为什么你要学习spring? 你第一次接触spring框架是在什么时候?相信很多人和我一样,第一次了 ...
- 基于 HTML5 WebGL 与 GIS 的智慧机场大数据可视化分析【转载】
前言:大数据,人工智能,工业物联网,5G 已经或者正在潜移默化地改变着我们的生活.在信息技术快速发展的时代,谁能抓住数据的核心,利用有效的方法对数据做数据挖掘和数据分析,从数据中发现趋势,谁就能做到精 ...
- babel-loader配置
1.npm i @babel/core.@babel/preset-env.@babel/runtime.@babel/plugin-transform-runtime.@babel/plugin-p ...
- 带修主席树 洛谷2617 支持单点更新以及区间kth大查询
题目链接:https://www.luogu.com.cn/problem/P2617 参考博客:https://blog.csdn.net/dreaming__ldx/article/details ...
- CF1324A Yet Another Tetris Problem 题解
原题链接 简要题意: 再简要一波: 每次可以把一个数增加 \(2\),问最后能不能让所有数相等.(也就是抵消掉) 什么?题意变成这样子还做个啥? 你会发现,必须所有数的奇偶性都相同,才可以:反之就不可 ...
- 机器学习3- 一元线性回归+Python实现
目录 1. 线性模型 2. 线性回归 2.1 一元线性回归 3. 一元线性回归的Python实现 3.1 使用 stikit-learn 3.1.1 导入必要模块 3.1.2 使用 Pandas 加载 ...
- TensorFlow RNN 教程和代码
分析: 看 TensorFlow 也有一段时间了,准备按照 GitHub 上的教程,敲出来,顺便整理一下思路. RNN部分 定义参数,包括数据相关,训练相关. 定义模型,损失函数,优化函数. 训练,准 ...
- 最便捷的神经网络可视化工具之一--Flashtorch
前言 几周前,我在AnitaB.org组织的Hopperx1 London上发表了演讲作为伦敦科技周的一部分. 在演讲结束后,我收到了热烈的反馈,所以我决定写一个稍微长一点的演讲版本来介绍FlashT ...
- ——JAVA基础部分
1. 我们能不能声明main()方法为非静态?√ 不能,main()方法必须声明为静态的,这样JVM才可以调用main()方法而无需实例化它的类. 如果从main()方法去掉“static”这个声明, ...
- js原生模拟new 关键字
function newOperator(ctor){ if(typeof ctor !== 'function'){ throw 'newOperator function the first pa ...