| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2949 人关注过本帖
标题:用折半法查找数据
只看楼主 加入收藏
孤狼A组
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:73
专家分:121
注 册:2015-9-8
收藏
得分:0 
把top=1;改成top=0;就可以找出963
#include <stdio.h>
#define N 15
 main()
 {
     int s[N] = {14,25,36,47,58,69,147,258,369,74,85,96,741,852,963}, i, j, temp, n,a=1;
     int top, bottle, mid, sign;
     char c;

     for ( i = 1; i < N; i++ )
         for ( j = 0; j < N - i; j++ )
             if ( s[j] < s[j + 1] )
             {   
                 temp = s[j];
                 s[j] = s[j + 1];
                 s[j + 1] = temp;
             }
     for ( i = 0; i < N; i++ )
         printf ("%d  ",s[i]);
         printf("\n");


    while (a)
     {
         printf ("input a number:");
         scanf ("%d",&n);
         top = 0;
         bottle = N;
         sign = 1;
         while ( sign == 1 )
         {   
             mid = ( top + bottle ) / 2;   
             if ( n > s[0] || n < s[N - 1] )
             {
                 printf ("the number is not exist");
                 sign = 0;
             }
            
             if(n>s[mid])
             { bottle=mid;
             mid=(top+bottle)/2;
             if(n==s[mid]) { printf ("%d 's number is s[%d]\n",n,mid);
                             break;}
               else if(top==bottle) exit(0);
             }
             if(n<s[mid])
             {     top=mid;
                 mid=(top+bottle)/2;
                 if(n==s[mid]) { printf ("%d 's number is s[%d]\n",n,mid);
                             break;}
                 else if(top==bottle) exit(0);
             }
         }
        
         printf ("continue? 1/0:   ");
         scanf ("%d",&a);
         
            
     }
 }
2015-11-12 21:29
terry6677
Rank: 1
等 级:新手上路
帖 子:45
专家分:5
注 册:2015-6-29
收藏
得分:0 
回复 7楼 rjsp
好了,这是为什么呢?
2015-11-13 10:44
terry6677
Rank: 1
等 级:新手上路
帖 子:45
专家分:5
注 册:2015-6-29
收藏
得分:0 
回复 8楼 wmf2014
这个也好用,请教这是为什么?
2015-11-13 10:45
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9024
专家分:54030
注 册:2011-1-18
收藏
得分:0 
以下是引用terry6677在2015-11-13 10:44:55的发言:

好了,这是为什么呢?
scanf 的格式化字符中,若出现空白字符,则表示滤去所有空白字符。空格和回车都属于空白字符
2015-11-13 12:15
快速回复:用折半法查找数据
数据加载中...
 
   



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

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