二分查找完整代码例子

简介: 二分查找完整代码例子
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 typedef int ElementType;
 5 
 6 typedef struct {
 7     int element[16];
 8     int length;
 9 }StaticTable;
10 
11 
12 //二分法查找
13 int BinarySearch(StaticTable* Tbl, ElementType K)
14 {//在表TB了中查找关键字为K的数据元素
15     int left, right, mid, NotFound = -1;
16     left = 1;                //初始左边界
17     right = Tbl->length;    //初始右边界
18     while (left <= right)
19     {
20         mid = (left + right) / 2;            //计算中间元素坐标
21         if (K < Tbl->element[mid]) right = mid - 1;        //调整有边界
22         else if (K > Tbl->element[mid]) left = mid + 1;    //调整做边界
23         else    return mid;        //查找成功,返回数据元素的下标
24     }
25     return NotFound;        //查找不成功,返回-1;
26 }
27 
28 
29 //顺序查找
30 int Index(StaticTable *Tbl, ElementType K)
31 {
32     int i ;
33     Tbl->element[0] = K;
34     for (i = Tbl->length; Tbl->element[i] != K; i--);
35     return i;
36 }
37 
38 
39 
40 int main()
41 {
42     StaticTable * Tb1 = (StaticTable*)malloc(sizeof(StaticTable));
43     Tb1->length = 15;
44     for (int i = 1; i < 16; i++)
45     {
46         Tb1->element[i] = i + 1;
47     }
48 
49     int index1 = BinarySearch(Tb1, 15);
50     printf("%d\n", index1);
51 
52     int index2 = Index(Tb1, 5);
53     printf("%d\n", index2);
54     return 0;
55 }


相关文章
|
6月前
|
并行计算 Go C++
2182.构造限制重复的字符串(模拟 贪心 优先队列 C++ Go)
【2月更文挑战第19天】2182.构造限制重复的字符串(模拟 贪心 优先队列 C++ Go)
49 1
|
3月前
|
搜索推荐 Java 索引
|
3月前
|
搜索推荐 Java 索引
|
3月前
|
搜索推荐 Java
|
6月前
一个简单二分查找的范例
一个简单二分查找的范例
24 0
|
11月前
|
存储 C++
数据的存储练习题 -- (解题思路+代码)
数据的存储练习题 -- (解题思路+代码)
61 0
链表翻转循环和递归写法(画图分析)
链表翻转循环和递归写法(画图分析)
32 0
|
搜索推荐
数据结构209-冒泡排序算法第二种写法代码
数据结构209-冒泡排序算法第二种写法代码
85 0
|
算法 搜索推荐
快速排序的代码实例
快速排序是排序算法之一,面试题里面经常会考到手写快速排序算法。