主题:[讨论]二分查找(折半查找)演示 急求帮忙!
射手星
[专家分:0] 发布于 2006-06-09 13:48:00
程序要求随机生成一个无序序列,或由用户输入一个无序序列,然后调用排序函数将无序序列进行递增排序,将排好序的数据输出,提示用户输入要查找的数据,然后初始化图形系统,调用查找函数,动态图形演示二分查找,设计三个垂直箭头,分别指示当前查找范围的左右边界和中间位置,随着程序执行中边界值的变化而移动指针,并在下方同时显示当前参与比较的数据,直到运行完毕显示查找结果。如果查找成功,中间位置的箭头指向找到的数据。
编查找程序我还是能实现的,但要求的演示功能我一点都不懂,又没有学过.请大家帮我看看应该怎样才能做出来
我的邮箱[email]chlijane@163.com[/email]
Q:258099739
回复列表 (共3个回复)
沙发
zhangbinjn [专家分:20] 发布于 2006-12-26 08:59:00
[em1][em2]一样一样啊,有高手帮忙了
板凳
雪光风剑 [专家分:27190] 发布于 2006-12-26 20:44:00
只要会查找就可以做出来
如果不是v系列/java的话
给你个小提示:
设立一个标志数组pointon[n]
pointon(k)= 0:k!=mid high low中任一
1:k==mid high low中任一
每次根据pointon(k)打出两行,pointon(k)=0时打5个空格否则打印两个空格+垂直箭头+两个空格。
然后再按%5d的格式打出数列
如果数列很长,记得交错打
3 楼
hzj1216000 [专家分:40] 发布于 2006-12-28 15:28:00
半序查找
#include<stdio.h>
#define MAX 100
typedef int KeyType;
typedef char InfoType[10];
typedef struct {
KeyType key;
InfoType info;
}NodeType;
typedef NodeType SeqList[MAX];
int BinSear(SeqList R,int low,int high,KeyType k){
int mid,i;
i=1;
while(low<=high){
mid=(low+high)/2;
if(R[mid].key==k) {
printf("第%d次查找到 %d的位置是 %d\n",i,k,mid);
return 1;
}
else if(k>R[mid].key) {
printf("第%d次查找区间[%d]-[%d]\n",i,R[low].key,R[high].key);
low=mid+1;
mid=(high+low)/2;
i++;
}
else{
printf("第%d次查找区间[%d]-[%d]\n",i,R[low].key,R[high].key);
high=mid-1;
mid=(high+low)/2;
i++;
}
}
return -1;
}
int main(){
int i,k,pos, n=100,a[100];
SeqList R;
for(i=0;i<n;i++){
a[i]=i;
R[i].key=i;
}
k=38;
BinSear(R,0,n-1,k);
}
我来回复