c - 折半查找(二分法检索)

 1 #include <stdio.h>
 2
 3 #define LEN 10
 4
 5 /*
 6 折半查找(二分法检索).
 7 */
 8
 9 int
10 index_of(int *a, int k) {
11     int l = 0;
12     int r = LEN -1;
13     int m;
14     while(l <= r) {
15         m = (r + l) >> 1;    //右移(即除以2).
16         if(k == a[m])
17             return m;    //找到,则直接返回下标.
18         else if(k > a[m])
19             l = m + 1;
20         else
21             r = m - 1;
22     }
23     return -1;    //结束循环后,仍未找到,则表示没有.
24 }
25
26
27 int
28 main(void) {
29             // 0  1, 2, 3, 4, 5, 6, 7, 8,  9
30     int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 19, 22};
31     int i = index_of(a, 19);
32     printf("%d\n", i);
33 }
时间: 2024-10-01 06:15:50

c - 折半查找(二分法检索)的相关文章

数组折半查找(二分法)方法

//折半查找(二分法)public void arrayHalfQuery() {    //定义一个数组,类型为int整型数据类型    int[] num = {1,3,4,7,9,10,12,15,17,19,21,22,25,26,28,29,30};    //定义一个要查找的key值    int key = 18;    //取出数组中最大值下标和最小值下标    int min = 0;    int max = num.length-1;    //调用死循环    while

Java实现折半查找(二分法)

利用Java实现折半查找 基本思路:while递归循环,不断判断a[middle]是否等于data,如果等于则跳出循环,返回索引值,如果不等,则进行二分处理,直至两者相等为止:其中通过count计数器记录查找次数,当count次数超过20次时视为元素不存在(此处有待优化) package test; /* * 二分法查找(折半查找) * TGmoving * */ public class halfSearch { public static int HalfSearch(int a[],int

二分法查找(折半查找)

顺序查找并没有对表中的关键字域的顺序做出任何假设,与顺序查找不同,在折半查找中,表中的记录是按关键字域有序排列的,其比较会出现下面三种结果: searchumn< list[middle].key,此时,无需考虑位于list[middle]和list[n-1]之间的记录,而继续查找位于list[0]和list[middle-1]间的记录. searchnum=list[middle].key,此时,查找成功,结束查找. searchnum>list[middle].key,此时,无需考虑位于l

查找之二折半查找(二分法查找)和插值查找

一.折半查找的前提是线性表中的记录必须好似关键码有序,线性表必须是顺序存储的. 二.折半查找 1 public class Binary_SearchDemo01 { 2 static int[] num = {0,1,3,5}; 3 public static void main(String[] args) { 4 int key = 3; 5 int x = Sequential_Search(key); 6 System.out.println(num[x]); 7 } 8 privat

12月28 数组的几种应用(冒泡、折半查找)

*************数组的应用************* 一.冒泡排序(升序.降序) 1.双层循环(循环套循环) (1).冒泡排序是用双层循环解决.外层循环的是趟数,里层循环的是次数.(2).趟数=n-1:次数=n-趟数.(3).里层循环使用if比较相临的两个数的大小,进行数值交换. 二.折半查找(也叫二分法) 1.前提:数组必须有序. 2.主要就是3个未知量. 顶部:topsub 底部:bottomsub 中间:midsub =(topsub+bottomsub)/2 将数组一分为二,然

java之折半查找

//功能:二分查找import java.util.*; public class Demo1 {    public static void main(String[] args) {      int arr[]={2,5,7,12,25};//定义arr数组并赋值      System.out.print("请输入你需要查找的数:");      Scanner sr=new Scanner(System.in);      int a=sr.nextInt();      B

静态查找表:顺序查找、折半查找、分块查找

引言: 除去各种线性和非线性的数据结构外.另一种在实际应用中大量使用的数据结构--查找表.查找表是由同一类型的数据元素构成的集合. 对查找表常常进行的操作有:1.查找某个"特定的"数据元素是否在查找表中:2.检索某个"特定的"数据元素的各种属性:3.在查找表中插入一个数据元素:4.从查找表中删去某个数据元素.对查找表仅仅作前两种统称为"查找"的操作,则称此类查找表为静态查找表. 若在查找过程中同一时候插入查找表中不存在的数据元素,或者从查找表中删

二分查找 (折半查找)

二分查找又称折半查找,它是一种效率较高的查找方法. [二分查找要求]:1.必须采用顺序存储结构          2.必须按关键字大小有序排列. [优缺点]折半查找法的优点是比较次数少,查找速度快,平均性能好;             其缺点是要求待查表为有序表,且插入删除困难. 因此,折半查找方法适用于 不经常变动而 查找频繁的有序列表. [算法思想]首先,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功:                              否则利用中

查找--二分法查找

逻辑分析 二分法查找,又叫折半查找法. 前提:待查序列必须为线性有序表. 步骤: 每次取待查序列的中间值与目标值对比,结果如下: 如果中间值小于目标值,则说明目标值在大的半区,继续取大半区的中间值与目标值对比. 如果中间值大于目标值,则说明目标值在小的半区,继续取小半区的中间值与目标值对比. 时间复杂度 O(logn) 实现代码(C#) /// <summary> /// 二分法查找 /// </summary> /// <param name="arr"