| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 598 人关注过本帖
标题:这个折半查找法怎么做!
只看楼主 加入收藏
manmao67
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2017-3-19
结帖率:0
收藏
已结贴  问题点数:20 回复次数:1 
这个折半查找法怎么做!
图片附件: 游客没有浏览图片的权限,请 登录注册
2017-03-19 22:25
Alien_Lee
Rank: 8Rank: 8
来 自:Linux帝国
等 级:蝙蝠侠
威 望:7
帖 子:149
专家分:739
注 册:2016-7-19
收藏
得分:20 
虽然我强烈谴责伸手党,但是你既然作为一个问题提出来了,那我还是给你写了个程序。
为了不剥削你的学习能力,我的这段代码没有注释。
请自行学习。

程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define N 15
typedef struct Node
{
    int value;
    int num;
struct    Node *next;
}node,*pnode;

int ss[N][2];

void range(pnode start)
{
    int i,j,v_tp,n_tp;
    pnode tp;
    tp = start->next;
    for (i = 0;i < N-1;i++)
    { 
        for (j = i;j < N;j++)
        {
            if (tp->next== NULL) continue;
            if ((tp->value) > (tp->next->value))
            {
                v_tp = tp->value;
                tp->value = tp->next->value;
                tp->next->value = v_tp;

                n_tp = tp->num;
                tp->num = tp->next->num;
                tp->next->num = n_tp;
            }
            tp = tp->next;
        }
        tp = start->next;
    }
    tp = start->next;
    for (i = 0;i < N;i++)
    {
        ss[i][0] = tp->num;
        ss[i][1] = tp->value;
        tp = tp->next;
    }
    
}

int search( int x)
{
    int m,n,k;
    m = 0;
    k=N;
    do
    {
        n = (m + k) / 2;
        if (ss[n][1] == x) return ss[n][0];
        if (n == k || n == m) return -1;
        else
            if (ss[n][1] > x)    k = n;
            else
            {
                m = n;
            }
        
    } while (k>=n&&n >= m);
    return -1;
}
void printf_link(pnode s)
{
    int i = 0;
    pnode p;
    p = s->next;
    while (p!=NULL)
    {
        printf("%d,", p->value);
        p = p->next;
    }
}
void main()
{
    pnode start,tmp,tmp2;
    int i,x;
    start = (pnode)malloc(sizeof(node));
    tmp = start;
    printf("输入你的%d个数列:\n",N);
    for (i = 0;i < N;i++)
    {
        tmp2 = (pnode)malloc(sizeof(node));
        scanf_s("%d", &tmp2->value);
        tmp2->num = i;
        tmp->next = tmp2;
        tmp = tmp2;
    }
    tmp->next= NULL;

    printf("您输入的数列为:");
    printf_link(start);
    putchar(10);
    range(start);
    while(1)
    {
        printf("输入你要查询的值:");
        if(scanf_s("%d", &x)==EOF) exit(1);
        i = search(x);
        if (i==-1)
            printf("无此数\n");
        else
            printf("是第%d个值\n", i+1);

    }


}


[此贴子已经被作者于2017-3-21 23:33编辑过]


  DEBUG的过程就是进步的过程,每一个小错误都是大问题!...
2017-03-21 23:32
快速回复:这个折半查找法怎么做!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024288 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved