-
C语言顺序查找
2020-02-23 15:13:26顺序査找是一种简单的査找算法,其实现方法是从序列的起始元素开始,逐个将序列中的元素与所要查找的元素进行比较,如果...示例顺序查找 #include <stdio.h> #include <stdlib.h> #include <memor...顺序査找是一种简单的査找算法,其实现方法是从序列的起始元素开始,逐个将序列中的元素与所要查找的元素进行比较,如果序列中有元素与所要查找的元素相等,那么査找成功,如果査找到序列的最后一个元素都不存在一个元素与所要査找的元素值相等,那么表明査找失败。
示例顺序查找
#include <stdio.h> #include <stdlib.h> #include <memory.h> int ordersearch(int a[], int n, int des){ int i; for(i=0; i<n; i++) if(des==a[i]) return 1; return 0; } int main(){ int i, val; int a[8] = {32,12,56,78,76,45,43,98}; int ret; for(i=0; i<8; i++) printf("%d\t", a[i]); printf("\n请输入所要查找的元素:"); while(1){ scanf("%d", &val); fflush(stdin); ret = ordersearch(a, 8, val); if(1 == ret) printf ("查找成功!"); else printf ("查找失败!"); printf("\n请输入所要查找的元素:"); } return 0; }
运行结果:
32 12 56 78 76 45 43 98
请输出所要查找的元素:78
查找成功!请输出所要查找的元素:5
查找失败!分析上面的运行结果,首先输入所要查找的元素为78,该数在所要查找的序列中是存在的,所以打印输出“查找成功! ”。接下来输入的数值5在所要查找的序列中并不存在,因此打印输出“查找失败!”。
扫一扫更精彩哟!!!
-
C语言顺序查找法
2020-12-05 22:29:59C语言顺序查找法 输入5个整数,将他们存入数组a中,再输入1个数x,然后在数组中查找x,如果找到,输出相应的最小下标,否则,输出“Not Found”。 /*在数组中查找指定的数*/ #include <stdio.h> int main(void...C语言顺序查找法
输入5个整数,将他们存入数组a中,再输入1个数x,然后在数组中查找x,如果找到,输出相应的最小下标,否则,输出“Not Found”。
/*在数组中查找指定的数*/ #include <stdio.h> int main(void) { int i,flag,x; int a[5]; printf("Enter 5 integers:"); for(i=0;i<5;i++) scanf("%d",&a[i]); printf("Enter x:"); scanf("%d",&x); /*在数组中查找x*/ flag=0; //先假设x不在数组中,置flag为0 for(i=0;i<5;i++) if(a[i]==x){ printf("Index is %d\n",i); flag=1; //置flag为1,说明x在数组a中 break; } if(flag==0); printf("Not Found\n"); return 0; }
-
数据结构算法 C语言顺序查找算法
2009-07-16 11:33:30我自己写的一个C语言顺序查找的算法程序,可以运行,是按照结构体定义并实现操作的 -
C语言顺序查找和二分法查找(折半查找法)
2020-12-21 16:37:481.顺序查找 顾名思义,就是按顺序往下一个一个查找,找到时返回,最差的情况是未找到并且全部遍历了一遍,这是消耗时间最长的一个方法 1.1代码实例:顺序查找 //顺序查找 int SeqSearch(RecType R[],KeyType x,int ...1.顺序查找
顾名思义,就是按顺序往下一个一个查找,找到时返回,最差的情况是未找到并且全部遍历了一遍,这是消耗时间最长的一个方法
1.1代码实例:顺序查找
//顺序查找 int SeqSearch(RecType R[],KeyType x,int n){ printf("开始顺序查找元素=>%d\n",x); for(int i=0;i<n;i++){ if(R[i].data==x){ printf("找到元素%d了,在第%d个\n",x,i+1); return i+1; } } printf("找不到该元素%d\n",x); return -1; }
2.二分法查找(折半查找法)
顾名思义,折半查找就是找一个元素,没找到就"切"一半继续找,直接舍弃另一边的元素
个人认为此方法需要建立在元素值已经排序后才可以进行查找元素位置
话不多说先上图
假设我们需要找到元素70的位置- 先确定1位和末尾(图中为11位)的位置,值赋给low和high代表左驱和右驱,中间位置(图中为6)赋值给mid
这时肯定有同学会问(就是我自己了),如果中间位置有俩怎么办呢,其实这个mid值的数据类型的int型的,也就是说假设(3+6)/2=4.5时,int类型的mid会得到4,也就是整型数据不看小数点(不是四舍五入,是不看小数点) - 接下来比对mid位置的值是否等于要查找的值(图中为70),此时可以看到,56<70,所以需要在值更大的区间去寻找(这也是为什么我说二分法需要排序的原因),即进行 low=mid , mid=(left+right)/2
- 继续比对,现在mid=80了,80>70,即需要在更小区间,即进行 right=mid,mid=(left+right)/2 操作
- 重复操作,直到left==right为止结束
2.1代码实例:二分法查找元素
//二分查找 int HalfSearch(RecType R[],KeyType x,int n){ printf("开始二分查找元素=>%d\n",x); int left=0,right=n-1,mid=(left+right)/2; while(left!=right){ if(R[mid].data==x){ printf("找到%d元素的位置为%d\n",x,mid+1); return mid; } if(R[mid].data>x){ right=mid; mid=(left+right)/2; }else if(R[mid].data<x){ left=mid; mid=(left+right)/2; } } printf("找不到该元素%d\n",x); return -1; }
3.完整代码及结果示例
#include<stdio.h> #include<stdlib.h> typedef int KeyType; typedef int InfoType; typedef struct{ KeyType key; InfoType data; }RecType; //创建 void CreatList(RecType R[],KeyType keys[],int n){ for(int i=0;i<n;i++){ R[i].data=keys[i]+12; R[i].key=i+1; } printf("创建成功\n"); } //顺序查找 int SeqSearch(RecType R[],KeyType x,int n){ printf("开始顺序查找元素=>%d\n",x); for(int i=0;i<n;i++){ if(R[i].data==x){ printf("找到元素%d了,在第%d个\n",x,i+1); return i+1; } } printf("找不到该元素%d\n",x); return -1; } //二分查找 int HalfSearch(RecType R[],KeyType x,int n){ printf("开始二分查找元素=>%d\n",x); int left=0,right=n-1,mid=(left+right)/2; while(left!=right){ if(R[mid].data==x){ printf("找到%d元素的位置为%d\n",x,mid+1); return mid; } if(R[mid].data>x){ right=mid; mid=(left+right)/2; }else if(R[mid].data<x){ left=mid; mid=(left+right)/2; } } printf("找不到该元素%d\n",x); return -1; } //输出 void DispList(RecType R[],int n){ for(int i=0;i<n;i++){ printf("关键字:%d 所对应的元素值为%d\n",R[i].key,R[i].data); } } int main(){ int keys[10]={1,2,3,4,5,6,7,8,9,10}; RecType R[20]; CreatList(R,keys,10); DispList(R,10); int local=SeqSearch(R,4,10); local=SeqSearch(R,14,10); local=HalfSearch(R,18,10); local=HalfSearch(R,8,10); }
结果
创建成功
关键字:1 所对应的元素值为13
关键字:2 所对应的元素值为14
关键字:3 所对应的元素值为15
关键字:4 所对应的元素值为16
关键字:5 所对应的元素值为17
关键字:6 所对应的元素值为18
关键字:7 所对应的元素值为19
关键字:8 所对应的元素值为20
关键字:9 所对应的元素值为21
关键字:10 所对应的元素值为22
开始顺序查找元素=>4
找不到该元素4
开始顺序查找元素=>14
找到元素14了,在第2个
开始二分查找元素=>18
找到18元素的位置为6
开始二分查找元素=>8
找不到该元素8 - 先确定1位和末尾(图中为11位)的位置,值赋给low和high代表左驱和右驱,中间位置(图中为6)赋值给mid
-
c语言 顺序查找与二分查找
2018-06-25 15:32:05二分查找必须是有顺序的序列(序列从大到小或从小到大)二分查找思想:一段有序...如图找24顺序查找与二分查找比较运行时间代码#include<stdio.h>#include<time.h>//clock函数头文件#in...二分查找必须是有顺序的序列(序列从大到小或从小到大)
二分查找思想:一段有序序列,取中间值(a[(i+j)/2])和要查找的值比较(假设序列为升序),如果中间值小于要查找的值,则取中间值右侧一段的中间值在进行比较,直到找到或遍历结束为止。
如图找24
顺序查找与二分查找比较运行时间代码
#include<stdio.h>
#include<time.h>//clock函数头文件
#include<stdlib.h>//strand,rand函数头文件
inta[1000000];//用于存储有序的数字的数组
doubleshunxu(int a[],int num,int n)//顺序查找函数
{
clock_t beg,end;//起始时间和结束时间
double time;//顺序查找运行时间
int i;
beg=clock();//起始时间
for(i=0;i<n;i++)//循环从第一个数开始比较
{
if(a[i]==num)//相等则找到待查数
{
printf("顺序查找找到指定数据%d\n",a[i]);
break; //跳出循环,不在进行查找
}
}
if(i==n)
{
printf("顺序查找未找到指定数据\n");
}
end=clock();//结束时间
time=(double)(end- beg) / CLOCKS_PER_SEC;//顺序查找运行时间
return time;
}
doubleerfen(int a[],int num,int n)//二分查找函数
{
clock_t beg,end;//同上
double time;
int low=0,mid,high=n-1;//low为数组第一个数下标,mid为中间数下标,high为最后一个数下标
beg=clock();//起始时间
while(low<=high)//进行循环low>high时数组遍历完成
{
mid=(low+high)/2;//求出新的中间数的下标
if(a[mid]<num)//当中间数小于待查数,待查数在中间数右面
{
low=mid+1;//将中间数下一个的下角标赋值给low
}
else if(a[mid]>num)//当中间数大于待查数,待查数在中间数左面
{
high=mid-1;//将中间数前一个的下角标赋值给high
}
else
{
printf("二分查找找到指定数据:%d\n",a[mid]);//中间值为待查值
break;
}
}
if(low>high)
{
printf("二分查找未找到指定数据\n");
}
end=clock();//结束时间
time=(double)(end- beg) / CLOCKS_PER_SEC;//运行时间
return time;
}
intmain()
{
int n,m,num,i;
printf("请输入数字个数:");
scanf("%d",&n); //n为数组数字个数
for(i=0;i<n;i++)//生成从小到大的有序数组
{
a[i]=i;
}
srand(time(NULL));
m=n-n/10+1;
num=rand()%m+(n/10);//随机生成一个待查数
printf("随机数为:%d\n",num);
printf("顺序查找运行时间为:%f\n",shunxu(a,num,n));
printf("二分查找运行时间为:%f\n",erfen(a,num,n));
return 0;
}
-
请教一道c语言顺序查找题
2017-06-11 15:50:46这题错哪了?什么意思呢?怎么改? -
C/C++常用算法【C语言顺序查找(随机数)】【1】
2015-12-11 14:44:19这是我学习唐峻,李淳的《C/C++常用算法第一天...接着,可以采用醉简单的逐个对比的方法进行查找,也就是顺序查找的方法,下面给出该算法完整的C语言代码:#include #include #include <time.h>#define N 20int main -
C/C++常用算法【C语言顺序查找(顺序表)】【2】
2015-12-11 18:21:46直接上代码,代码中有详细注释,请自己领悟#...#include <stdlib.h>#define MAXLEN 100 //定义顺序表的最大长度typedef struct { char key[10]; //结点的关键字 char name[20]; int age; } DATA; //定义结点类型ty -
数据结构 c语言 顺序查找算法(linux下实现)
2017-07-30 16:33:08#include #define N 10 int seqsearch(int *a,int key); int main() { int a[] = {3,5,7,2,9,8,4,3,10,2}; int i,key; char ch; while(1) { printf("please input key");... -
C语言分块查找算法,索引顺序查找算法.docx
2020-01-08 07:38:07C语言分块查找算法索引顺序查找算法 例如采用分块查找法在有序表 111218283956698996122135146156256298 中查找关键字为 96 的元素 査找特定关键字元素个数为 15要求用户输入有序表各元素程序输出査找成功与否若成功... -
C语言之顺序查找
2020-12-04 10:17:10顺序查找 总结: 顺序查找,在找索引的函数中有三个参数,分别是一个数组,数组长度,用户输入的值。 到此结束,完结撒花!~~ -
C语言实现顺序查找
2017-12-25 18:08:44C语言实现顺序查找#include int search(int a[], int y, int x); /*对自定义的函数search进行声明*/ int main(void) { int i, x, n; /*变量定义*/ int a[10]; printf("请输入10个数字!\n"); for(i = 0; i ; i++... -
C语言实现顺序表的顺序查找和折半查找
2020-08-25 21:40:20主要为大家详细介绍了C语言实现顺序表的顺序查找和折半查找,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 -
C语言静态查找表:顺序查找、二分查找、分块查找
2019-05-02 11:49:062.1顺序查找 2.1.1概念 2.1.2分类 2.1.3源代码示例 2.1.4性能分析 2.2二分查找 2.2.1实现算法前提 2.2.2实现思路(以升序为例) 2.2.3源代码示例 2.2.4性能分析 2.3分块查找 2.3.1概念 2.3.2实现思路 ... -
顺序查找 C语言
2016-04-05 21:22:24顺序查找 C语言 -
C语言之顺序查找算法
2016-07-26 11:57:23一、什么是顺序查找?顺序査找是一种简单的査找算法,其实现方法是从序列的起始元素开始,逐个将序列中的元素与所要查找的元素进行比较,如果序列中有元素与所要查找的元素相等,那么査找成功,如果査找到序列的最后... -
C语言-顺序查找、二分查找
2020-04-25 14:24:511顺序查找 顺序查找也称为线形查找,属于无序查找算法。从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值k相比较,若相等则表示查找成功;若扫描结束仍没有找到关键字等于k的结点,表示...