树的引子, 顺序查找和二分查找

简介: 树的引子, 顺序查找和二分查找

顺序查找

1 Position SequentialSearch(List Tbl, ElementType K)
2 {
3     Position i;
4     Tbl->Data[0] = K;
5     for (i = Tbl->Last; Tbl->Data[i] != K; i--);
6     return i;
7 }

二分查找

 1 Position BinarySearch(List Tbl, ElementType K)
 2 {
 3     Position Left, Right, Mid;
 4     Left = 1;
 5     Right = Tbl->Last;
 6     
 7     while (Left <= Right)
 8     {
 9         Mid = (Left + Right) / 2;
10         if (Tbl->Data[Mid] < K) 
11             Left = Mid + 1;
12         else if (Tbl->Data[Mid] > K) 
13             Right = Mid - 1;
14         else
15             return Mid;
16     }
17     return NotFound;
18 }

测试这两个查找的剩余代码

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 #define MAXSIZE 15
 5 typedef int ElementType;
 6 typedef int Position;
 7 #define NotFound 0        //找不到则返回0
 8 
 9 struct Array{
10     ElementType Data[MAXSIZE];
11     int Last;
12 };
13 typedef struct Array* List;
14 
15 List CreateArray()
16 {
17     List Tbl = (List)malloc(sizeof(struct Array));        //已经为Data数组分配好了空间
18     printf("%d\n", sizeof(struct Array));
19     //Tbl->Data = (ElementType*)malloc(sizeof(ElementType) * MAXSIZE);
20     Tbl->Last = 0;
21     return Tbl;
22 }
23 
24 void InsertA(List Tbl, ElementType X)
25 {
26     Tbl->Data[++Tbl->Last] = X;
27 }
 1 int main()
 2 {
 3     List Tbl = CreateArray();
 4     int result;
 5     for (int i = 0; i <10; i++)
 6         InsertA(Tbl, i + 15);
 7     for (int i = 0; i < Tbl->Last; i++)
 8         printf("%d ", Tbl->Data[i]);
 9 
10     //result = SequentialSearch(Tbl, 19);
11     result = BinarySearch(Tbl, 19);
12     if (result)
13         printf("\nFind %d at index %d\n", 19, result);
14     else
15         printf("\nNot found\n");
16 
17     for (int i = 0; i < Tbl->Last; i++)
18         printf("%d ", Tbl->Data[i]);
19     return 0;
20 }


相关文章
|
算法 C++
【基础算法】顺序查找 折半查找 & C++实现
顺序查找比较简单,就是顺序遍历我们所要查找的内容,判断并找出相应的目标数。比较简单,在这里不用图形说明程序实现具体情况。当面临大量数据时,顺序查找的效率非常低,时间复杂度大,所以会采用其他方法进行查找。
95 0
【基础算法】顺序查找 折半查找 & C++实现
|
10月前
|
存储 算法
【数据结构】 拿捏二叉树堆排序与遍历
【数据结构】 拿捏二叉树堆排序与遍历
|
11月前
|
存储 机器学习/深度学习 算法
Java数据结构与算法分析(六)树
树是一种非线性的数据结构,它包含n(n>=1)个节点,(n-1)条边的有穷集合。把它叫做“树”是因为它看起来像一个倒挂的树,也就是说它是根朝上,叶子朝下的。
77 0
|
11月前
|
算法 Java
Java数据结构与算法分析(七)二叉树
二叉树是一棵特殊的树,其结构简单但很重要。二叉树的特点是每个节点最多有两棵子树,并且有左右之分。
56 0
|
算法 索引
【21天算法学习】顺序查找
【21天算法学习】顺序查找
46 0
树的预备知识,基本术语,顺序查找(哨兵)和二分查找
树的预备知识,基本术语,顺序查找(哨兵)和二分查找
|
算法
04查找算法:顺序查找法、二分查找法
04查找算法:顺序查找法、二分查找法
04查找算法:顺序查找法、二分查找法
|
算法 Java
合并二叉树(java数据结构与算法)采用的是递归方法
合并二叉树(java数据结构与算法)采用的是递归方法
135 0
合并二叉树(java数据结构与算法)采用的是递归方法
经典面试题:将有序数组、有序链表转换成平衡二叉树
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
177 0
经典面试题:将有序数组、有序链表转换成平衡二叉树
|
算法 API
数据结构与算法—二叉排序(查找)树
前面介绍学习的大多是线性表相关的内容,把指针搞懂后其实也没有什么难度。规则相对是简单的。
57 0
数据结构与算法—二叉排序(查找)树