| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 406 人关注过本帖
标题:折半查找法,程序运行的时候只有一个结果肿么破!!!
只看楼主 加入收藏
张学平
Rank: 2
等 级:论坛游民
帖 子:26
专家分:13
注 册:2013-11-20
结帖率:75%
收藏
已结贴  问题点数:10 回复次数:2 
折半查找法,程序运行的时候只有一个结果肿么破!!!
程序代码:
#include "stdio.h"
int main(void)
{int a[15];

 int i,j,t,min,mid,max,p;

 printf("Please input the array:\n");
  for(i=0;i<15;i++)
   scanf("%d",&a[i]);
  printf("\n");
  for(i=1;i<15;i++)
   for(j=0;j<15-i;j++)
    if(a[j]<a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}
  printf("The consecution is:\n");
  for(i=0;i<15;i++)
   printf("%5d",a[i]);
  printf("\n");
   /*以上将数组按倒序排序*/
  printf("Please input a number:");
   scanf("%d",&p);
  max=a[0];min=a[14];
   for(;min<a[0];)
   {mid=(max+min)/2;
       if(p==mid){printf("The number is in the array!");break;}
     else if(p>mid)min=mid+1;
     else max=mid-1;
   }
   /*折半查找*/
}//??

2013-11-22 11:54
wjykhf
Rank: 2
等 级:论坛游民
帖 子:3
专家分:10
注 册:2013-11-22
收藏
得分:5 
回复 楼主 张学平
我只是打酱油的,错了请大神指正
max = 0 min = 14
for(;min>=max;)
{
    mid = (max+min)/2;
    if(p==a[mid]){printf("The number is in the array!");break;}
     else if(p>a[mid]) max=mid+1;
     else min=mid-1;
}
2013-11-22 13:35
a151141
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:197
专家分:680
注 册:2012-10-19
收藏
得分:5 
呵呵,懒得写了,粘贴了百度一下
折半查找法是效率较高的一种查找方法。假设有已经按照从小到大的顺序排列好的五个整数a0~a4,要查找的数是X,其基本思想是: 设查找数据的范围下限为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,说明没有此数,打印找不到信息,程序结束
改后的代码
#include "stdio.h"
int main(void)
{
    int a[5];        //为了测试方便,将15改成5了,下面也随之改动了
    int i,j,t,min,mid,max,p;
    printf("Please input the array:\n");
    for(i=0;i<5;i++)
        scanf("%d",&a[i]);
     printf("\n");
     for(i=1;i<5;i++)
         for(j=0;j<5-1;j++)
             if(a[j]<a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}
    printf("The consecution is:\n");
     for(i=0;i<5;i++)
         printf("%5d",a[i]);
      printf("\n");
       /*以上将数组按倒序排序*/
      printf("Please input a number:");
      scanf("%d",&p);
      max=4;min=0;
      for(;min<max;)
      {
          mid=(max+min)/2;
          if(p==mid){printf("The number is in the array!");break;}
          else if(p<mid)min=mid+1;
          else max=mid-1;
       }
       /*折半查找*/
}//??

世界上幸福的事就是抓到一只羊,更幸福的事就是抓到两只羊……
2013-11-22 21:49
快速回复:折半查找法,程序运行的时候只有一个结果肿么破!!!
数据加载中...
 
   



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

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