回 帖 发 新 帖 刷新版面

主题:[讨论]二分查找(折半查找)演示    急求帮忙!

    程序要求随机生成一个无序序列,或由用户输入一个无序序列,然后调用排序函数将无序序列进行递增排序,将排好序的数据输出,提示用户输入要查找的数据,然后初始化图形系统,调用查找函数,动态图形演示二分查找,设计三个垂直箭头,分别指示当前查找范围的左右边界和中间位置,随着程序执行中边界值的变化而移动指针,并在下方同时显示当前参与比较的数据,直到运行完毕显示查找结果。如果查找成功,中间位置的箭头指向找到的数据。

    编查找程序我还是能实现的,但要求的演示功能我一点都不懂,又没有学过.请大家帮我看看应该怎样才能做出来
我的邮箱[email]chlijane@163.com[/email]
      Q:258099739

回复列表 (共3个回复)

沙发


[em1][em2]一样一样啊,有高手帮忙了

板凳

只要会查找就可以做出来
如果不是v系列/java的话
给你个小提示:
设立一个标志数组pointon[n]
pointon(k)= 0:k!=mid high low中任一
            1:k==mid high low中任一
每次根据pointon(k)打出两行,pointon(k)=0时打5个空格否则打印两个空格+垂直箭头+两个空格。
然后再按%5d的格式打出数列
如果数列很长,记得交错打

3 楼

半序查找
#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);

}

我来回复

您尚未登录,请登录后再回复。点此登录或注册