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

顺序查找

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 }

原文地址:https://www.cnblogs.com/hi3254014978/p/9744897.html

时间: 2024-11-05 18:49:46

树的引子, 顺序查找和二分查找的相关文章

2. C#数据结构与算法 -- 查找算法(顺序查找,哈希查找,二分查找(折半),索引,二叉)

1. 顺序查找算法 ===================================================== 算法思想简单描述: 最突出的查找类型就是从记录集的开始处顺次遍历每条记录,直到找到所要的记录或者是 到达数据集的末尾.这就是所谓的顺序查找.顺序查找(也被称为线性查找)是非常容易实现 的.从数组的起始处开始,把每个访问到的数组元素依次和所要查找的数值进行比较.如果找 到匹配的数据项,就结束查找操作.如果遍历到数组的末尾仍没有产生匹配,那么就说明此数 值不在数组内. ==

顺序查找和二分查找

1.使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组[转] 2.顺序查找 <?php//$n为待查找的数组元素的个数,$k为待查找的元素function seq_sch($array, $n, $k){ $array[$n] = $k; for($i=0; $i<$n; $i++){ if($array[$i]==$k){ return true;break; } } if ($i<$n) //判断是否到数组的末尾{ return $i

【Java_Base】常用查找算法:顺序查找、二分查找

顺序查找 从第一个元素开始顺序比较查找. 二分查找 二分查找前提条件: 已排序的数组中查找 二分查找的基本思想是: 首先确定该查找区间的中间点位置: int mid = (low+upper) / 2; 然后将待查找的值与中间点位置的值比较: 若相等,则查找成功并返回此位置. 若中间点位置值大于待查值,则新的查找区间是中间点位置的左边区域. 若中间点位置值小于待查值,则新的查找区间是中间点位置的右边区域. 下一次查找是针对新的查找区间进行的. 1 public class Search{ 2 p

查找系列之简述顺序查找和二分查找

顺序查找和二分查找 一.顺序查找思想 1. 从表的一端开始扫描,顺序扫描线性表,依次扫描到的结点关键字与给定的值K相比较.如果当前扫描到的结点的关键字与给定的值K相等,则查找成功;若扫描结束后,仍未找到关键字与给定的值K相等,则查找失败; 2.顺序查找既适用于顺序存储结构,也适用于线性表的链式存储结构; 3.ASL= (n+1)/2为其平均查找长度 4.优点:算法简单,对存储结构形式没有要求 缺点:浪费空间,当长度非常大是效率低 5.算法描述: /** *顺序查找 *@param int a[]

动态数组,数组初始化,数组内存释放,向数组中添加一个元素,向数组中添加多个元素,数组打印,顺序查找,二分查找,查找数组并返回地址,冒泡排序,改变数组中某个元素的值,删除一个数值,删除所有,查找含有

 1定义接口: Num.h #ifndef_NUM_H_ #define_NUM_H_ #include<stdio.h> #include<stdlib.h> /************************************************************************/ /*数组的结构体类型                                                    */ /*******************

Java中常用的查找算法——顺序查找和二分查找

Java中常用的查找算法——顺序查找和二分查找 一.顺序查找: a) 原理:顺序查找就是按顺序从头到尾依次往下查找,找到数据,则提前结束查找,找不到便一直查找下去,直到数据最后一位. b) 图例说明: 原始数据:int[] a={4,6,2,8,1,9,0,3}; 要查找数字:8 代码演示: import java.util.Scanner; /* * 顺序查找 */ public class SequelSearch { public static void main(String[] arg

算法-基础和查找-1.汉诺塔/2.顺序查找/3.二分查找/4.顺序查找和二分查找的比较

1.汉诺塔: 如下图所示,需要将A柱子中的所有圆盘按照从小到大的顺序移动到C柱子上,并且在移动过程中大圆盘不能在小圆盘上面 分析问题:最终希望呈现的结果是将A柱子上的盘子全部按照从小到大的顺序移动到C柱子上 1.n个盘子,将n-1视为一个整体 2.将n-1个盘子视为一个盘子从a经过c移动到b 3.将n从a移动到c 4.将n-1个盘子从b经过a移动到c 5.结束条件:n>0 代码如下: 1 def hanoi(n, a, b, c): 2 if n > 0: 3 hanoi(n-1, a, c,

看数据结构写代码(53) 静态查找表(线性查找,二分查找,斐波那契查找,插值查找)

查找定义:根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录). 查找表分类:静态查找表和动态查找表. 静态查找表:只查找,而不进行插入,删除. 动态查找表:在查找过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已经存在的某个数据元素. 静态表的 查找 大致 四种 算法: 线性查找,二分查找,斐波那契查找和插值查找. 其中 在线性查找之前,对表 无要求.对于 其余三种 需要 在查找之前 排序.插值查找 除了 需要 排序,还需要 均匀分布. 下面 给出代码: 线性查

对分查找法(二分查找法,折半查找法)

二分查找法是针对已经排好序的序列进行查找 每次折半查找 算法时间复杂度,对于长度为N的序列,每次执行N/2,假设k次结束,最后到第一个N/2^k=0,所以k=logN 时间复杂度logN int binarysearch(const int array[], int x, int N) { int low, mid, high; low = 0, high = N - 1; while (low <= high) { mid = (low + high) / 2; if(array[mid] <

List&lt;T&gt;线性查找和二分查找BinarySearch效率分析

今天因为要用到List的查找功能,所以写了一段测试代码,测试线性查找和二分查找的性能差距,以决定选择哪种查找方式. 线性查找:Contains,Find,IndexOf都是线性查找. 二分查找:BinarySearch,因为二分查找必须是对有序数组才有效,所以查找前要调用List的Sort方法. 结论:如果List项的个数比较小,用线性查找要略快于二分查找,项的个数越多二分算法优势越明显.可根据实际情况选用适合的查找方式. 测试结果: 测试代码: private void button1_Cli