有15个数存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在

C语言
如果该数不在 就输出无此数

折半查找,这个你按照下面的代码输入15个数,并输入要找的数即可

/*******************************
*
* From: C++奋斗乐园
* Author: Tanky Woo
* Website: www.cpply.com
* BBS: www.cppleyuan.com
* Blog: www.wutianqi.com
*
********************************/

//算法功能:用折半查找方法实现有序顺序表的静态查找

#include <stdio.h>
#define maxsize 100 //预定义最大的数据域空间
typedef int datatype; //假设数据类型为整型

typedef struct SqList
{
datatype data[maxsize]; //此处假设数据元素只包含一个整型的关键字域
int len; //线性表长度
}SqList;

//折半查找的非递归实现
int binsearch1(SqList l, datatype key)
{
int low = 0, high = l.len-1, mid;
while(low <= high)
{
mid = (low+high)/2;
if(l.data[mid] == key)
return mid; //检索成功返回
if(l.data[mid] > key)
high = mid-1;
else
low = mid+1;
}
return -1;
}

//折半查找的递归实现
int binsearch2(SqList l, datatype key, int low, int high)
{
int mid;
if(low > high)
return -1;
else
{
mid = (low+high)/2;
if(l.data[mid] == key)
return mid;
if(l.data[mid] > key)
return binsearch2(l, key, low, mid-1);
else
return binsearch2(l, key, mid+1, high);
}
}

int main()
{
printf("==============================\n");
printf("=\n");
printf("= From: C++奋斗乐园\n");
printf("= Author: Tanky Woo\n");
printf("= WebSite: www.cpply.com\n");
printf("= BBS: www.cppleyuan.com\n");
printf("= Bolg: www.wutianqi.com\n");
printf("=\n");
printf("==============================\n\n");
//****************************************************

int i, k;
datatype key;
SqList l;
printf("请输入线性表的长度:");
scanf("%d", &l.len);
printf("请输入线性表的数据:\n");
for(i = 0; i < l.len; i++)
scanf("%d", &l.data[i]);
do
{
printf("请输入待查找的关键字(-1退出):");
scanf("%d", &key);
if(key == -1)
break;
if((k = binsearch1(l, key)) != -1)
printf("非递归查找发现,%d在线性表的第 %d 个位置。\n", key, k+1);
else
printf("未找到指定元素\n");
//****************************************************
if((k = binsearch2(l, key, 0, l.len-1)) != -1)
printf(" 递归查找发现,%d在线性表的第 %d 个位置。\n", key, k+1);
else
printf("未找到指定元素\n");
}while(key != -1);
return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-01-11
#include <stdio.h>
#include <stdlib.h>

int main(void) {
int ary[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int num = 16;
int pos;
int low;
int high;
int mid;
low = 1;
high = 15;
pos = 0;
while(high>=low){
mid = (low + high)/2;
if(ary[mid-1]>num){
high = mid-1;
}else if(ary[mid-1]<num){
low = mid + 1;
}else{
pos = mid;
break;
}
}
if(pos == 0){
printf("the data is not found\n");
}else{
printf("the data pos is :%d\n",pos);
}

return 0;
}本回答被提问者采纳
第2个回答  2011-01-11
是要编程吗?
什么语言?

C语言程序编写——折半查找法
include<stdio.h>int main(){int a[16]={15,14,13,12,11,10,9,8,7,6,5,4,3,1,0}; int l=0,r=15,mid,x; scanf("%d",&x); do {mid=(l+r)\/2; if(a[mid]==x)break; if(x>a[mid])r=mid-1; else l=mid+1; }while(l<=r); if(a[mid]==x) print...

C语言,会的帮个忙。全部做出来的话我把我分全加给他
\/ 有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是 数组中第几个元素值。如果该数不在数组中,则打印出“无此数”。\/ include<stdio.h> void binsrch( int m[],int k){ int low,high,mid;low=0;high=14;while (low<=high){ mid=(low+high)\/2...

C语言程序设计实现任一字符和字符串长度的输出,其中字符和字符串内容由...
回车确认,返回输入的字符串int getLen(char *str);\/\/通过指针获取字符串长度void meError(void *p);\/\/内存申请失败int main(){ char *str=NULL; str=input(); printf("\\n输入的字符串为:%s\\n",str)

用二分法查找(折半查找)java
public class BinarySearch {public static void main(String[] args) {\/\/ 生成一个随机数组 int[] array = suiji();\/\/ 对随机数组排序 Arrays.sort(array);System.out.println("产生的随机数组为: " + Arrays.toString(array));System.out.println("要进行查找的值: ");Scanner input ...

...的顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数...
比如给一个4的数,程序第一步从数组中取出排在中间数的数(i=7),即第8个数89.用89和4比较。如果大于89就往后循环查找,即查找89后的{144,233,377,570,671,703,812},如果小于89就往前查找,即查找89前的]{1,4,9,13,21,34,55},不管往前还是往后最大循环次数都是7,所以while循环结束条件是(fabs(i-7)...

有15个数按大由小顺序存放在一个数组中,输入一个数,要求用折半查找法...
cout<<"输入要查找的数"<<endl; cin>>n; k=n\/2; bool falg=false; for(m=0;m<15;m++) { if(k==a[m]) {cout<<"该数再数组中的位置是:"<<m+1<<endl; falg=true;} if(!falg) cout<<"查无此数"<<endl;} system("PAUSE"); return 0;} 这次应该没错了 本回答由电脑网络分类达人 ...

c语言:编写程序,在有序的数列中查找某数,若该数在此数列中则输出它的...
题目:试编写一个程序完成:有15个数按从下到大的顺序存放在一个数组中.输入一个数,要求折半查找法找出该数是数组中第几个元素的值.如果该数不在数组中,输出“不在表。===下面是C代码,其中数组没有设计为录入,而是固定数组=== \/\/输出的序列是从0开始算的,也就是输出的是所在数组的索引...

...排列,输入一个数,运用折半查找法找出该数是第几个数。
void main(){ int i,number,top,bott,mid,loca,a[N],flag=1,sign;char c;printf("由大到小输入15个数 :\\n");for(i=0;i<N;i++){ scanf("%d",&a[0]);i++;while(i!=-1&&i<N){ scanf("%d",&a[i]);if(a[i]<a[i-1])i++;else {printf("输入有误,请重新输入:\\...

c语言编程实现“折半查找”的过程。
折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。通过一次比较,将查找区间缩小一半。 折半查找是一种高效的查找方法。它可以明显减少比较次数,...

c语言怎么使用折半法
220,250,260,400};\/\/如果返回right的值,说明没找到int half_find(int a[], \/\/查找数组 int left, int right, \/\/起始位置 int target) \/\/查找目标{ int pos = right; while (left < right) { int mid = left + (right-left)\/2; if (a[mid] > target) {\/\/大于目标就在...

相似回答