| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8840 人关注过本帖
标题:求一个C程算法——折半查找法
只看楼主 加入收藏
独角龙
Rank: 1
等 级:新手上路
帖 子:221
专家分:0
注 册:2006-5-5
收藏
得分:0 
楼上的仍美中不足,经过您这样的排序之后数组的位置变了,
用结构体,
struct
{
int pos;  /*标记数的位置*/
int num;
};
这样才好,排序后也可以从pos变量中得出是数组的哪个位置。


给个程序吧!学习中!

奋斗改变一切!!
2006-05-27 19:53
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 

呵呵,还挺及时,
我刚才看见了,刚编好,
#include "stdio.h"
#include "conio.h"
#include "time.h"
#define N 10
typedef struct
{
int pos;
int num;
}code;
main()
{
int i,j,search,front,rear,mid,s=0;
code array[N];
srand((unsigned)time(NULL));
for(i=0;i<N;i++)
{
array[i].pos=i+1;
array[i].num=rand()%100;
}


for(i=0;i<10;i++)
printf("%3d",array[i].num);


for(i=0;i<N;i++)
for(j=i;j<N;j++)
{
if(array[i].num>array[j].num)
{
array[i].num+=array[j].num;
array[j].num=array[i].num-array[j].num;
array[i].num=array[i].num-array[j].num;
}
}


printf("\n请输入您要查找的数:");
scanf("%d",&search);

for(i=0;i<10;i++)
if(search!=array[i].num)
s++;
if(s==10)
{
printf("没有找到!");
getch();
exit(0);
}
front=0;
rear=9;
do{
mid=(front+rear)/2;
if(array[mid].num<search)
front=mid;
if(array[mid].num>search)
rear=mid;
}
while(array[mid].num!=search);
printf("你要查找的数的位置在第%d位。",array[mid].pos);
getch();
}


对不礼貌的女生收钱......
2006-05-27 19:56
lijiangbo
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2005-12-22
收藏
得分:0 

我觉得求不出来,因为要用折半查找的前提是先要对原来数组进行排序,这样的话原来数组的下标就改变了.比如14楼的程序:原来的数组是这样a[] = {74, 5, 45, 2, 21, 6, 7, 8, 15, 10}; 排序后就变成这样a[] = {2,5,6,7,8,10,15,21,45,74};
当你输入10时输出的下标是5 而10在原来的下标是9

各位大虾我这样解释对否?


有志者事竟成
2006-05-27 20:31
独角龙
Rank: 1
等 级:新手上路
帖 子:221
专家分:0
注 册:2006-5-5
收藏
得分:0 
srand((unsigned)time(NULL));
这个都用上了!
牛!!
学了一招!
编的很好的!谢了!!

奋斗改变一切!!
2006-05-27 20:35
独角龙
Rank: 1
等 级:新手上路
帖 子:221
专家分:0
注 册:2006-5-5
收藏
得分:0 
说的没错
不过人家22楼的已经替我改了!!
呵呵

奋斗改变一切!!
2006-05-27 20:39
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
呵呵,那个函数,本来我都用srand(time(NULL));的
后来给你的论坛大哥一提,就加个unsigned了,以报万全!

对不礼貌的女生收钱......
2006-05-27 20:40
独角龙
Rank: 1
等 级:新手上路
帖 子:221
专家分:0
注 册:2006-5-5
收藏
得分:0 

他有很多地方加的东西人家都不懂是什么意思啊?
呵呵


奋斗改变一切!!
2006-05-27 20:47
a326686861
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-4-10
收藏
得分:0 
    #include "time.h"           srand((unsigned)time(NULL));        rand()%100;  我是菜鸟,请大家指教下这起的什么作用? 在线等
2007-04-12 20:49
初心者1号
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2007-3-31
收藏
得分:0 
二分查找法的条件就是数组必须是有序的。
2007-04-12 21:03
alading664
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-1-25
收藏
得分:0 
/* binary search */
#define COMPARE(x,y) (((x)<(y)) ? -1:((x)==(y)) ? 0:1)
/* search the array for searchvalue.return its position if found.otherwise return -1 *?
int binsearch(int list[],int searchvalue,int right,int left)
{
int middle;
while(left<=right)
{
middle=(left+right)/2;
switch(COMPARE(list(middle),searchvalue))
{
case -1: left=middle+1;break;
case 0: return middle;
case 1: right=middle-1;break;
}
}
return -1;
}
2007-04-12 21:39
快速回复:求一个C程算法——折半查找法
数据加载中...
 
   



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

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