当前位置:首页 » 操作系统 » 查找算法的流程图

查找算法的流程图

发布时间: 2022-05-14 05:25:40

① 宿舍管理系统软件查找部分的算法流程图

摘要

② 计算机搜索算法的一般过程是什么

一般采用的都是二分查找吧,时间复杂度O(log n),算是比较快的了。
不过我也不太确定,你可以F12进去查看页面源代码分析一下。

③ 解决查找问题的算法流程图如图VB

这个是"对分查找"算法,你提问题要把代码分行写,这样人家很难看清楚,应该象如下所示:
'===================================================================
Private Sub Command1_Click()
Dim key As String , i As Integer
Dim j As Integer , found As Boolean
i = 1: j = 200 : found = False
(1)
Do While i <= j And Not found
m = Int((i + j) / 2)
If cno(m) = key
Then found = True
ElseIf (2) Then
i = m + 1
Else
j = m – 1
End If
Loop
If Not found Then
Text2.Text = "找不到"
Else
Text2.Text = cno(m)
End If
End Sub
程序中划线处(1)应填入
程序中划线处(2)应填入
'===================================================================
代码中最后第二行那个“End If”,是我帮你2上去了,另外数组的名称前面是cno,后面是cnum,
我改为cno了。
显然,key没有赋值,所以(1)处应该是通过键盘输入要查找的数值:
Key = Val(InputBox("请输入要找的数值。")
而对分查找,需要数组是有序的,可以升序也可以降序,你没有告诉我题目是如何说的?
如果数组是升序的:
(2)应该是:cno(m) < key
如果数组是降序的:
(2)应该是:cno(m) > key
显然,这只是程序的一部分,因为其它部分必须处理数组的建立,排序等。
这个问题,应该是教科书上的问题,好好学习吧,否则没法工作!

④ 求助:二分查找算法流程图,在Raptor中实现该算法

二分查找算法流程图,实现核算法

⑤ 设计从5个不同的数中找出最大数的算法,并画出流程图.

略 算法步骤如下: (1)输入 , , , , ; (2)将 与 中的大数记作b; (3)将b与 比较大小,大数记作b; (4)将b与 比较大小,大数记作b; (5)将b与 比较大小,大数记作b; (6)输出b.流程图如图: 在上述的3个关键步骤中,每一步都要与上一步中得到的最大数b进行比较,得出新的最大数,将其也记作b.b可以取不同的值.

⑥ 程序设计问题,查找算法性能研究,帮下忙谢啦

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
static const int ARRAY_MAX = 10000;
typedef int DataType;
class SequentialStorage
{
public:
DataType data[ARRAY_MAX];
int top;
SequentialStorage()
{
top = -1;
}
void insertData(DataType data)
{
if(top == ARRAY_MAX-1)
return;
this->data[++top] = data;
}
int find(DataType data)
{
for(int i = 0;i <= top;i++)
{
if(this->data[i] == data)
return i;
}
return -1;
}
};
class OrderlySequenceStorage
{
public:
DataType data[ARRAY_MAX];
int top;
OrderlySequenceStorage()
{
top = -1;
}
void insertData(DataType data)//插入排序
{
if(top == ARRAY_MAX-1)
return;
int i = top;
while(this->data[i] > data&&i != -1)
{
this->data[i+1] = this->data[i];
i--;
}
this->data[i+1] = data;
top++;
}
int find(DataType data)//普通查找
{
for(int i = 0;i <= top;i++)
{
if(this->data[i] == data)
return i;
}
return -1;
}
int find2(DataType data)//二分法
{
if(this->data[0] > data||this->data[top] < data)
return -1;
if(this->data[0] == data)
return 0;
if(this->data[top] == data)
return top;
int a = 0;
int b = top;
while(true)
{
if(a == b-1)
return -1;
if(this->data[(a+b)/2] == data)
return (a+b)/2;
else if(this->data[(a+b)/2] < data)
a = (a+b)/2;
else
b = (a+b)/2;
}
}
};
typedef struct node
{
DataType data;
struct node *pNext;
}LLSNode;
class LinkedListStorage
{
public:
LLSNode *pHead;
LinkedListStorage()
{
pHead = NULL;
}
void insertData(DataType data)
{
LLSNode *p = (LLSNode *)malloc(sizeof(LLSNode));
p->data = data;
p->pNext = pHead;
pHead = p;

}
LLSNode *find(DataType data)
{
LLSNode *p = pHead;
while(p)
{
if(p->data == data)
return p;
p = p->pNext;
}
return NULL;
}
};
typedef struct node2
{
DataType data;
struct node2 *lchild,*rchild;
}BSTNode;
class BinarySortTree
{
public:
BSTNode *pRoot;
BinarySortTree()
{
pRoot = NULL;
}
void insertData(DataType data)
{
BSTNode *f,*p = pRoot;
while(p)
{
f = p;
if(data < p->data)
p = p->lchild;
else
p = p->rchild;
}
p = (BSTNode *)malloc(sizeof(BSTNode));
p->data = data;
p->lchild = NULL;
p->rchild = NULL;
if(pRoot == NULL)
pRoot = p;
else
if(data < f->data)
f->lchild = p;
else
f->rchild = p;
}
BSTNode *find(DataType data)
{
if(pRoot == NULL)
return NULL;
else
return recursion(data,pRoot);
}
BSTNode *recursion(DataType data,BSTNode *p)
{
if(data == p->data||p == NULL)
return p;
else if(data < p->data)
return recursion(data,p->lchild);
else
return recursion(data,p->rchild);
}
void print()
{
if(pRoot != NULL)
printR(pRoot);
}
void printR(BSTNode *p)
{
if(p->lchild != NULL)
printR(p->lchild);
printf("%d\t",p->data);
if(p->rchild != NULL)
printR(p->rchild);
}
};

class CPUTime
{
public:
_int64 getCPUCycleCount(void)
{
_asm _emit 0x0F
_asm _emit 0x31
}
long long arr[1000];
int count;
long long lastCPUCycleCount;
int randCount;
CPUTime()
{
for(int i = 0;i < 1000;i++)
arr[i] = 0;
count = -1;
lastCPUCycleCount = getCPUCycleCount();
randCount = 0;
}
void setTimePoint()
{
arr[++count] = getCPUCycleCount()-lastCPUCycleCount;
lastCPUCycleCount = getCPUCycleCount();
}
int rand()
{
randCount++;
int temp = getCPUCycleCount()%20000;
return (temp*(randCount+temp))%10007;
}
};

int main()
{

SequentialStorage ss;
OrderlySequenceStorage oss;
LinkedListStorage lls;
BinarySortTree bst;
DataType temp1;
CPUTime cpuTime;
for(int i = 0;i < 2000;i++)
{
temp1 = cpuTime.rand();
ss.insertData(temp1);
oss.insertData(temp1);
lls.insertData(temp1);
bst.insertData(temp1);
}
DataType temp[7];
for(int i = 0;i < 7;i++)
temp[i] = ss.data[cpuTime.rand()%2000];
cpuTime.setTimePoint();
for(int i = 0;i < 7;i++)
{
ss.find(temp[i]);
cpuTime.setTimePoint();
}
for(int i = 0;i < 7;i++)
{
oss.find(temp[i]);
cpuTime.setTimePoint();
}
for(int i = 0;i < 7;i++)
{
oss.find2(temp[i]);
cpuTime.setTimePoint();
}
for(int i = 0;i < 7;i++)
{
lls.find(temp[i]);
cpuTime.setTimePoint();
}
for(int i = 0;i < 7;i++)
{
bst.find(temp[i]);
cpuTime.setTimePoint();
}

int count = 1;
printf("各项存储结构查找已存在数据的时间(cpu周期):\n");
printf("储存方式\t\t数据1\t数据2\t数据3\t数据4\t数据5\t数据6\t平均\n");
int a[9];
for(int i = 1;i < 8;i++)
a[i] = (int)cpuTime.arr[count++];
a[8] = (a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7])/7;
printf("顺序存储\t\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",a[1],a[2],a[3],a[4],a[5],a[6],a[8]);
for(int i = 1;i < 8;i++)
a[i] = (int)cpuTime.arr[count++];
a[8] = (a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7])/7;
printf("有序顺序存储(普通)\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",a[1],a[2],a[3],a[4],a[5],a[6],a[8]);
for(int i = 1;i < 8;i++)
a[i] = (int)cpuTime.arr[count++];
a[8] = (a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7])/7;
printf("有序顺序存储(二分法)\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",a[1],a[2],a[3],a[4],a[5],a[6],a[8]);
for(int i = 1;i < 8;i++)
a[i] = (int)cpuTime.arr[count++];
a[8] = (a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7])/7;
printf("链表存储\t\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",a[1],a[2],a[3],a[4],a[5],a[6],a[8]);
for(int i = 1;i < 8;i++)
a[i] = (int)cpuTime.arr[count++];
a[8] = (a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7])/7;
printf("二叉排序树存储\t\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",a[1],a[2],a[3],a[4],a[5],a[6],a[8]);

system("pause");

}

//我按照课题的要求写的c++具体实现的代码,楼主可以编译运行着试试,你可以参考一下
//我这搜索的是储存结构里已存在的数据,你也可以按题目的要求用随机生成的数据
//楼主留下qq吧,我等会把流程图发给你
//至于其他的,楼主还是自己试着写写看吧

⑦ 算法流程图怎么画

算法流程图绘制方法:

1、根据具体的步骤先画出流程图的形状,然后在里面填上事情的发展顺序;

2、在纸上的画法是一样的,先根据事情的发展顺序画出具体的图案,然后在里面填上事情的发展顺序;

3、在电脑上操作比较简单,数据也比较清晰,在纸上画电脑的流程图的时候先将具体的数据分析清楚之后在按照步骤画出来。

流程在画的时候非常的考验人的数字总结能力,需要有清晰的逻辑将事物的发展过程叙述清楚,再将整个事件总结成几个主要的过程,根据过程的条数在电脑上面画出具体的发展流程。

一般在电脑上的流程图画起来比较方便,因为在电脑上操作的时候一些数据可以直接从上面计算。先总结出开始和结尾的具体过程,总结好之后在电脑上面画出具体的流程图图标,将事情的发展经过填到图标里面,流程图在做的时候还要有很好的思维发散能力,根据具体发生的某一件事,做出事情的原因,经过,预测的结果。

手绘流程图过程和电脑上一样,都是需要思考过事情的起因,经过,结果,将发展过程画在纸上就可以,画的时候注意事情的发展顺序不要出现错误。

(7)查找算法的流程图扩展阅读:

算法流程图的基本结构:

1、顺序结构

顺序结构是最简单的一种基本结构。

2、选择结构

根据给定的条件p是否成立而选择执行A和B。p条件可以是“x>0”或“x>y”等。注意,无论p条件是否成立,只能执行A或B之一,不可能既执行A又执行B。无论走哪一条路径,在执行完A或B之后将脱离选择结构。A或B两个框中可以有一个是空的,即不执行任何操作。

3、循环结构

又称重复结构,即反复执行某一部分的操作。有两类循环结构:

当型(While):当给定的条件p成立时,执行A框操作,然后再判断p条件是否成立。如果仍然成立,再执行A框,如此反复直到p条件不成立为止。此时不执行A框而脱离循环结构。

直到型(Until):先执行A框,然后判断给定的p条件是否成立。如果p条件不成立,则再执行A,然后再对p条件作判断。如此反复直到给定的p条件成立为止。此时脱离本循环结构。

⑧ 算法流程图怎么做

第一步解决算术的核心

⑨ 求查找算法(折半查找法,顺序查找法,分别在一个程序里)“动画演示”程序源代码,一共两个源代码

折半搜索(英语:half-interval search),也称二分搜索(英语:binary search)、对数搜索(英语:logarithmic search),是一种在有序数组中查找某一特定元素的搜索算法。

搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。

折半查找法是效率较高的一种查找方法。假设有已经按照从小到大的顺序排列好的五个整数a0~a4,要查找的数是X,其基本思想是: 设查找数据的范围下限为l=0,上限为h=4,求中点m=(l+h)/2,用X与中点元素am比较,若X等于am,即找到,停止查找;否则,若X大于am,替换下限l=m+1,到下半段继续查找;若X小于am,换上限h=m-1,到上半段继续查找;如此重复前面的过程直到找到或者l>h为止。如果l>h,说明没有此数,打印找不到信息,程序结束。

函数实现如下:

bin_search(intA[],intn,intkey){
intlow,high,mid;
low=0;
high=n-1;
while(low<=high)
{
mid=(low+high)/2;
if(A[mid]==key)returnmid;
if(A[mid]<key){
low=mid+1;
}
if(A[mid]>key){
high=mid-1;
}
}
return-1;
}
C语言实现代码
#include<stdio.h>intmain()
{
inta[11]={0,1,2,3,4,5,6,7,8,9,10},min=0,max=10,mid,n;//max为数列长度,a[0]作为第一个数组元素
printf("请输入您要查找的数: ");
scanf("%d",&n);
while(min+1!=max)
{
mid=(min+max)/2;
if(n>a[mid])min=mid;
elseif(n<a[mid])max=mid;
else
{
printf("输入的数在数列的第%d位 ",mid);
exit(0);
}
}
if(n==a[max])
{
max+=1;
printf(" 输入的数在数列的第%d位 ",max);
}
elseif(n==a[min])
{
min+=1;
printf(" 输入的数在数列的第%d位 ",min);
}
elseif(n!=a[mid])
printf(" 输入的数不在数列中");
}
Dev-c++实现
#include<stdio.h>
#include<stdlib.h>
voidmain()
{
inta[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,15};
intn,m,top,bot,mid;
top=m=1;//此处修改top=0;m=1;
bot=14;
printf("pleaseinputanumber:");
scanf("%d",&n);
while(top<=bot)
{
mid=(top+bot)/2;
if(n==a[mid])
{
printf("这是第%d个元素的值。 ",mid+1);
m=0;
break;
}
elseif(n>a[mid])
top=mid+1;
elseif(n<a[mid])
bot=mid-1;
}
if(m)
printf("无此数。 ");
system("PAUSE");
return0;
}

顺序查找是按照序列原有顺序对数组进行遍历比较查询的基本查找算法。

对于任意一个序列以及一个给定的元素,将给定元素与序列中元素依次比较,直到找出与给定关键字相同的元素,或者将序列中的元素与其都比较完为止。

函数实现如下:

intsq_search(keytypekeyp[],intn,keytypekey)
{
inti;
for(i=0;i<n;i++)
if(key[i]==key)
returni;//查找成功
return-1;//查找失败
}

上面只是算法实现函数,对于动画部分,自己用moveto,lineto描点划线的方式实现吧。

热点内容
洗过的海带存储方法 发布:2024-10-10 11:19:00 浏览:239
64H的源码 发布:2024-10-10 11:06:01 浏览:152
mc服务器怎么增加back指令 发布:2024-10-10 10:58:48 浏览:256
termux如何搭建服务器 发布:2024-10-10 10:18:05 浏览:737
中国石化的电话服务密码是多少 发布:2024-10-10 10:16:46 浏览:42
婚纱店宣传片视频脚本 发布:2024-10-10 10:08:55 浏览:869
android写入文件 发布:2024-10-10 10:08:11 浏览:435
怎么打开文件夹的路径 发布:2024-10-10 10:08:06 浏览:61
ec服务器怎么有小提示 发布:2024-10-10 10:08:04 浏览:495
我的世界迪士尼神奇宝贝服务器地址 发布:2024-10-10 09:03:02 浏览:560