为了账号安全,请及时绑定邮箱和手机立即绑定

刚学c语言用c语言写有15个数无序存放在一个数组中 先排序 输入一个数要求用折半查找发找出该数是数组

刚学c语言用c语言写有15个数无序存放在一个数组中 先排序 输入一个数要求用折半查找发找出该数是数组

C
慕粉1249561471 2017-05-04 10:23:31
刚学 求大神帮帮忙
查看完整描述

1 回答

?
Atlas_Wu

TA贡献3条经验 获得超3个赞

  数字的排序直接到网上搜索“C语言冒泡法排序”,网上有图文详解

 

  折半法在数组中查找某一数值,然后返回下标,可以参考我下面的程序。


/*核心思想是把输入的数字和数组的中间数做对比,如果x大于数组的中间数,那就改变下标为中间数下标;

如果x小于数组的中间数,那就改变上标为中间数下标; 如果x于中间数相等,就返回下标; 如果找不到x,返回-1*/


#include<stdio.h>
#define M 30
int search(int v[],int x);


int main()        
{
 int x,i,n;    
 int v[M];
 v[0]=0;
 for(i=0;i<M;i++)     //这里我按大小顺序给数组赋值,所以我没有排序
 {
  v[i+1]=v[i]+1;
 }


 printf("please enter a x\n");
 scanf("%d",&x);
 n=search(v,x);
 if(n==-1)printf("can not find\n");
 else printf("下标是%d\n",n);

 return 0;
}



int search(int v[],int x)        //这个函数是用折半法在数组中找数字x
{
 int mid;  //中值
 int low=0;  //下限
 int high=M-1; //上限
 while(low<=high)
 { 
  mid=(low+high)/2;
  if(x>v[mid])
   low=mid+1;
  else if(x<v[mid])
   high=mid-1;
  else return mid;
 }
 return -1;
 
}


查看完整回答
1 反对 回复 2017-05-04
  • 1 回答
  • 0 关注
  • 2108 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信