静态查找(顺序查找和折半查找)
来源:互联网 发布:pdf文件制作软件 编辑:程序博客网 时间:2024/06/01 09:52
听说过一句话,编程之久,除了数据结构和算法什么也不属于我们。为了更好的学习数据结构和算法,今天决定先把清华大学出版的数据结构(C语言版)书中的算法实现一遍。现在开始第一弹。贵在坚持。
顺序查找:
算法描述
#include <stdio.h>
#include <stdlib.h>
//顺序表的查找
#define EQ(a, b) ((a) == (b))
#define ElemTypeint
typedef struct{
ElemType *elem; //数据元素存储空间基址,建表时按实际长度分配,0号单元留空
int length; //表长度
}SSTable;
//在顺序表ST中顺序查找其关键字等于key的数据元素。若找到,则函数值为该元素在表中的位置,否则为0
int Search_Seq(SSTable ST, ElemType key)
{
int i;
ST.elem[0] = key; //“哨兵”
for(i = ST.length; !EQ(ST.elem[i], key); --i); //从后往前找
return i; //找不到时,i为0
}
int main()
{
SSTable s1;
int key=4;
int a[6];
for(int i=1;i<=5;i++){
a[i]=i;
}
s1.elem=a;
s1.length=5;
int c=Search_Seq(s1,key);
printf("%d\n",c);
}
性能分析:
ASL(successful)=(n+1)/2;
ASL(f)=n+1;
ASL(平均)=(ASL(s)+ASL(f))/2=3/4(n+1);
折半查找:
#include <stdio.h>
#include <stdlib.h>
//折半查找算法
typedef struct{
int *elem;
int length;
}SSTable;
int Search_Bin(SSTable s1,int key,int &n){
int low=1;
int high=s1.length;
while(low<=high){
n++;
int mid=(low+high)/2;
if(s1.elem[mid]==key) return mid;
else if(s1.elem[mid]>key) high=mid-1;
else low=mid+1;
}
//没有查找到
return 0;
}
int main()
{
int n=0;
SSTable s1;
s1.length=12;
int a[12]={0,2,3,4,5,6,7,8,9,12,26,45};
s1.elem=a;
int result=Search_Bin(s1,7,n);
printf("元素所在位置的数组下标为:%d\n",result);
printf("查找的次数为:%d\n",n);
}
性能分析:
效率比较:折半查找>顺序查找
- 静态查找(顺序查找和折半查找)
- 静态查找(顺序、折半)
- 静态查找:顺序查找和折半查找法
- 查找(一)静态查找的顺序查找和 有序折半查找
- 顺序查找和折半查找
- 顺序查找和折半查找
- 顺序查找和折半查找
- 顺序查找和折半查找
- 折半查找和顺序查找
- 折半查找和顺序查找
- 顺序查找和折半查找
- 顺序查找和折半查找
- 折半查找和顺序查找
- 静态查找表:顺序查找、折半查找、分块查找
- 静态查找表:顺序查找、折半查找、分块查找
- 静态查找(顺序查找,折半查找,插值查找,斐波那契查找)
- 静态查找---->顺序、折半、分块查找
- 折半查找&顺序查找
- 首页动画结束跳转
- 一种流量成本节省60%以上的手机直播微信直播H5直播幼儿园直播方案
- 51nod 1088 最长回文子串
- HDU
- 计算机网络 滑动窗口协议
- 静态查找(顺序查找和折半查找)
- 一维数组排序
- K-means和PAM聚类算法Python实现及对比
- 打印okhttp请求log信息
- 登录注册使用数据库
- 视频编码中常用熵编码介绍
- 【Struts】接收表单传递给Action的参数
- 欢迎使用CSDN-markdown编辑器
- 【STM32】一些基础的操作