折半搜索(英语: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(int A[],int n,int key){int low,high,mid;
low = 0;
high = n-1;
while(low<=high)
{
mid =(low + high)/2;
if(A[mid]==key)return mid;
if(A[mid]<key){
low =mid + 1;
}
if(A[mid]>key){
high= mid - 1;
}
}
return -1;
}
C语言实现代码
#include <stdioh>int main()
{
int a[11]={0,1,2,3,4,5,6,7,8,9,10},min=0,max=10,mid,n; //max为数列长度,a[0]作为第一个数组元素
printf("请输入您要查找的数:\n");
scanf("%d",&n);
while(min+1!=max)
{
mid=(min+max)/2;
if (n>a[mid]) min=mid;
else if (n<a[mid]) max=mid;
else
{
printf("输入的数在数列的第%d位\n",mid);
exit(0);
}
}
if(n==a[max])
{
max+=1;
printf("\n输入的数在数列的第%d位\n",max);
}
else if(n==a[min])
{
min+=1;
printf("\n输入的数在数列的第%d位\n",min);
}
else if(n!=a[mid])
printf("\n输入的数不在数列中");
}
Dev-c++实现
#include <stdioh>
#include <stdlibh>
void main()
{
int a[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,15};
int n,m,top,bot,mid;
top=m=1; //此处修改top=0;m=1;
bot=14;
printf("please input a number:");
scanf("%d",&n);
while(top<=bot)
{
mid=(top+bot)/2;
if(n==a[mid])
{
printf("这是第%d个元素的值。\n",mid+1);
m=0;
break;
}
else if(n>a[mid])
top=mid+1;
else if(n<a[mid])
bot=mid-1;
}
if(m)
printf("无此数。\n");
system("PAUSE");
return 0;
}
顺序查找是按照序列原有顺序对数组进行遍历比较查询的基本查找算法。
对于任意一个序列以及一个给定的元素,将给定元素与序列中元素依次比较,直到找出与给定关键字相同的元素,或者将序列中的元素与其都比较完为止。
函数实现如下:
int sq_search(keytype keyp[],int n,keytype key){
int i;
for(i=0; i<n; i++)
if(key[i] == key)
return i;//查找成功
return -1;//查找失败
}
上面只是算法实现函数,对于动画部分,自己用moveto,lineto描点划线的方式实现吧。
实验三 进程调度
一、实验目的
在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。当就绪进程个数大于处理机数时,就必须依照某种策略来决定那些进程优先占用处理机。本实验模拟在单处理机情况下的处理机调度,帮助学生加深了解处理机调度的工作。
二、实验内容
设计一个时间片轮转调度算法实现处理机调度的程序。
三、实验指导
1实验中使用的数据结构:
1)PCB进程控制块
其中包括参数①进程名name;②要求运行时间runtime;③优先数prior;④状态state;⑤已运行时间runedtime。
2)为简单起见,只设运行队列,就绪链表两种数据结构,进程的调度在这两个队列中切换,如图31所示。
图31PCB链表
2运行结果,包括各个进程的运行顺序,每次占用处理机的运行时间
3每个进程运行时间随机产生,为1~20之间的整数。
4时间片的大小由实验者自己定义,可为3或5。
四、实验要求
1在上机前写出全部源程序;
2能在机器上正确运行程序。
五、程序清单
六、运行结果
七、调试分析及实验心得
我的回答和这位老兄的差不多
以上就是关于求查找算法(折半查找法,顺序查找法,分别在一个程序里)“动画演示”程序源代码,一共两个源代码全部的内容,包括:求查找算法(折半查找法,顺序查找法,分别在一个程序里)“动画演示”程序源代码,一共两个源代码、如何用C语言编写:设计一个时间片轮转调度算法实现处理机调度的程序、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)