| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 416 人关注过本帖
标题:谁能教教我?用比较容易理解的方法做。。。
只看楼主 加入收藏
tudou2xigua
Rank: 2
等 级:论坛游民
帖 子:87
专家分:54
注 册:2011-3-20
结帖率:90.32%
收藏
已结贴  问题点数:20 回复次数:6 
谁能教教我?用比较容易理解的方法做。。。
有个15数按由小到大顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数组中第几个元素的值。如果该数不在数组中,输出‘未找到’
搜索更多相关主题的帖子: 元素 
2011-04-13 21:52
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
从来不用折半法,也没有研究过!

   唯实惟新 至诚致志
2011-04-13 21:57
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:0 
以下是引用qq1023569223在2011-4-13 21:57:31的发言:

从来不用折半法,也没有研究过!

是二分查找吧?

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-04-13 23:51
默默学习
Rank: 4
等 级:业余侠客
帖 子:134
专家分:200
注 册:2010-6-22
收藏
得分:0 
折半查找.说实话,我好象做过练习也看过。但是自己比较苯,忘了,也可以说没掌握
有个公式,好象还有个固定值. 整串数 先取一半,判断是那一半, 在利用这个固定值 继续取一半.
反正最后能找出。
具体如下:
设查找数据的范围下限为l=1,上限为h=5,求中点m=(l+h)/2,用X与中点元素am比较,若X等于am,即找到,停止查找;否则,若X大于am,替换下限l=m+1,到下半段继续查找;若X小于am,换上限h=m-1,到上半段继续查找;如此重复前面的过程直到找到或者l>h为止。如果l>h,说明没有此数,打印找不到信息,程序结束。
2011-04-14 00:04
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:20 
利用二分查找法的一个练习。
程序代码:
root@~ #cat 5.c
#include <stdio.h>
#include <time.h>
int main (void) {
        srand((unsigned)time(NULL));

        int i,j,a[15]={1,2,4,6,7,9,10,13,14,15,17,19,20,29,30};
        j=rand()%30+1;
        int mid,low,high;
        low=0,high=14;

        printf ("Original array is: ");
        for(i=0;i<15;i++) {
                printf ("%i ",a[i]);
        }

        printf ("\nRandom element is :%i\n",j);

        while(low<=high) {
                mid=(low+high)/2;
                if(a[mid]==j) {
                        printf ("Position No.%i\n",mid);
                        return 0;
                }
                if(a[mid]<j) {
                        low=mid+1;
                }
                if(a[mid]>j) {
                        high=mid-1;
                }

        }

        printf ("No Found!\n");

        return 0;

}

root@~ #

测试:
程序代码:
root@~ #./5
Original array is: 1 2 4 6 7 9 10 13 14 15 17 19 20 29 30
Random element is :11
No Found!
root@~ #./5
Original array is: 1 2 4 6 7 9 10 13 14 15 17 19 20 29 30
Random element is :5
No Found!
root@~ #./5
Original array is: 1 2 4 6 7 9 10 13 14 15 17 19 20 29 30
Random element is :20
Position No.12
root@~ #./5
Original array is: 1 2 4 6 7 9 10 13 14 15 17 19 20 29 30
Random element is :14
Position No.8
root@~ #./5
Original array is: 1 2 4 6 7 9 10 13 14 15 17 19 20 29 30
Random element is :8
No Found!
root@~ #./5
Original array is: 1 2 4 6 7 9 10 13 14 15 17 19 20 29 30
Random element is :2
Position No.1
root@~ #


[ 本帖最后由 ansic 于 2011-4-14 10:03 编辑 ]

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-04-14 10:01
爱海松涛
Rank: 3Rank: 3
来 自:安徽合肥
等 级:论坛游侠
帖 子:120
专家分:197
注 册:2011-2-25
收藏
得分:0 
这个好麻烦的方法啊、、
2011-04-14 10:48
succubus
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:635
专家分:1080
注 册:2007-10-7
收藏
得分:0 
mid=(low+high)/2;最好改成mid = low+(high-low)/2;

[url=http:///view/aDU1]/image/aDU1.gif" border="0" />[/url]
2011-04-14 11:32
快速回复:谁能教教我?用比较容易理解的方法做。。。
数据加载中...
 
   



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

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