高分求救

飞岩走壁 2006-07-18 01:32:20
程序如下:
#include <iostream>
using namespace std;


typedef struct _dd
{
unsigned long long ud;
unsigned long long uc;
}DD,*PDD;


bool search(const DD a[],const int &c ,int &d ,int &e)
{

for(int i=0;i<100;i++) //这里是使用的顺序搜索的方法
{
if(a[i].uc==c&&a[i].ud==d)
{ e=i;
return true;
}
}

return false;

}

int main()
{

DD array[100];

for(int i=0;i<100;i++)
{
array[i].uc=i+1;
array[i].ud=i+101;

}


bool res;
int e;
int c=5;
int d=105;
res=search(array,c,d,e);

if(res)
{
cout<<"found."<<e<<endl;
}

else
{
cout<<"cann't find."<<endl;
}


return 0;
}

问题:

如何使用一种非顺序搜索的方法找到由多个关键值决定的某一元素。
...全文
217 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenhu_doc 2006-07-18
  • 打赏
  • 举报
回复
也可以考虑基数排序,毕竟他的思想就是关键字一个个的匹配!
chenhu_doc 2006-07-18
  • 打赏
  • 举报
回复
恩,没有顺序,又要按非顺序查找......

那就在排序的过程中查找,排序的过程中有个抛弃(就是符合当前关键字的另外存储)的过程. 之后针对下一关键字查找,(抛弃)
飞岩走壁 2006-07-18
  • 打赏
  • 举报
回复
主要目的是为了查找,如果排序有利用于查找,那也可以先排序,再查找!
再次声明结构体里面的关键值都是无序的.
ykzhujiang 2006-07-18
  • 打赏
  • 举报
回复
排序和搜索在某种意义上是可以转化的,可以看作针对待查找元素进行排序
chenhu_doc 2006-07-18
  • 打赏
  • 举报
回复
看来都被偶迷惑了,请楼下的分清查找和排序吧!!!
wangzw_cn 2006-07-18
  • 打赏
  • 举报
回复
按ud排序好一点吧,数字空间大重复的少
ykzhujiang 2006-07-18
  • 打赏
  • 举报
回复
恩,基数排序不错
chenhu_doc 2006-07-18
  • 打赏
  • 举报
回复
uc,ud都是无序的.若要排序,是按哪一个关键字按序,因为有多个关键字?
------------
标准的基数排序.....
chenhu_doc 2006-07-18
  • 打赏
  • 举报
回复
#include<stdio.h>

typedef struct
{
int a[30];
int length;
}sqtable;

sqtable st;

void creat(int k)
{
int i;
printf("Please input data:\n");
st.a[0]=-100;
for(i=1;i<=k;i++)
{
scanf("%d",&(st.a[i]));
if(st.a[i]<st.a[i-1])
{
printf("Input data error.Please try again!\n");
i--;
}
}
st.length=k;
printf("The table is build.\n");
}

void stfind(sqtable st,int y,int l,int h)
{
if(y==st.a[(l+h)/2]) printf("Find %d in position %d.\n",y,(l+h)/2);
else if(l==h) printf("Not find %d.\n",y);
else
if(y<st.a[(l+h)/2]) stfind(st,y,l,((l+h)/2-1));
else if(y>st.a[(l+h)/2]) stfind(st,y,((l+h)/2+1),h);

}

main()
{
int n,x,l,h;
printf("Please input n:\nn=");
scanf("%d",&n);
creat(n);
printf("Please input you want find value:");
scanf("%d",&x);
l=1;
h=st.length;
//printf("--------%d---------",h);
stfind(st,x,l,h);
}

//初始化改动一下,做判断的时候多判断(多个关键字)。
飞岩走壁 2006-07-18
  • 打赏
  • 举报
回复
再加一点,这里我是为了演示,事实上,uc,ud都是无序的.若要排序,是按哪一个关键字按序,因为有多个关键字?
wangzw_cn 2006-07-18
  • 打赏
  • 举报
回复
array[i].uc=i+1;
array[i].ud=i+101;
这样直接可以从uc\ud里得出i,跟hash法差不多
ykzhujiang 2006-07-18
  • 打赏
  • 举报
回复
恩,基数排序不错
chenhu_doc 2006-07-18
  • 打赏
  • 举报
回复
for(int i=0;i<100;i++)
{
array[i].uc=i+1;
array[i].ud=i+101;

} //由小到大....
chenhu_doc 2006-07-18
  • 打赏
  • 举报
回复
可以考虑基数排序!!
ckp 2006-07-18
  • 打赏
  • 举报
回复
如果数值按照从小到大的顺序排列,可以使用二分法查找

65,189

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧