顺序表的顺序查找和二分查找?

作者&投稿:台炎 (若有异议请与网页底部的电邮联系)
编写无序顺序表顺序查找、有序顺序表顺序查找、二分查找算法。用c语言。高分急求!~

int IdxSerch(SeqList A[],IdxType index[],int b,KeyType k,int n) {
//分块查找关键字为k的记录,索引表为
index[0..b-1]
int low=0,high=b-1,mid,i;
int s=n/b; //每块记录个数
while(low<=high)
{
//在索引表中进行二分查找,找到的位置放在low中
mid=(low+high)/2;
if(index[mid].key<k) low=mid+1;
else high=mid-1;
}

if(low<b)
{
//在顺序表中顺序查找
for(i=index[low].link;i<=index[low].link+s-1 && i<n;i++)
if(A[i].key==k) return i;
return -1;
}
return -1;
}




typedef struct node
{
KeyType key;
//结点中的关键字
struct node *lchild,*rchild; //左、右孩子指针
}BsTree;

BsTree *BstSeareh(BsTree *BST,KeyType k ,BsTree **parent)
{
BsTree *p=BST,*q=NULL; //p指向根结点,q指向*p的双亲
while(p!=NULL)
{
if(k==p->key)
{ //查找成功
*parent=q;
return (p);
}
q=p;
if(kkey) p=p->lchild;
//在左子树中查找
else p=p->rchild; //在右子树中查找
}
*parent=q;
return (p);
//查找失败,返回空
}

你有学过数据结构没有?
你看一下,看了有哪不懂的可以问我!
我再帮你解答,你这一下让我写程序,我没时间写啊!

//我暂时就给你写了二分查找的,其它的过两天给你,我没时间写啊,一直都有课
#include
using namespace std;
const int size =5;
//*****
bool find(int num[],int first,int length,int value)
{
if(first 0){
if(value == num[(first+length)/2]) return true;
else if( value < num[(first+length)/2]) {find(num,first,(first+length)/2 - 1, value);}
else {find(num,(first+length)/2+1,length, value);}
}
else{
return false;
}
}
//****
int _tmain(int argc, _TCHAR* argv[])
{
int num[size],first=0,length=size,i,value;
cout<<"Input the num :
";
for(i=0;i<size;++i)
cin>>num[i];
cout<<"The searched number: ";
cin>>value;
if( !find(num,first,length,value) )
cout<<"No found;
";
else
cout<<"Yes found the number
";
return 0;
}

// 散列表的!
#include
using namespace std;

int HashSearch1(int ht[ ], int m, int k)
{
int j=k%m;
if (ht[j]==k)
return j; //没有发生冲突,比较一次查找成功
int i=(j+1) % m;
while (i!=j)
{
if (ht[i]==k)
return i; //发生冲突,比较若干次查找成功
i=(i+1) % m; //向后探测一个位置
}
if (i==j)
throw "溢出";
else
ht[i]=k; //查找不成功时插入
}

void main()
{
int s[11]={11,0,0,47,0,0,0,7,29,8,0};
cout<<"散列表中的元素有:
";
for(int i=0;i<11;i++)
{
cout<<s[i]<<" ";
}
cout<<"
"<<"执行查找操作,结果为:
"; //查找操作
cout<<HashSearch1(s,11,8)<<endl;

}

我想顺序查找不用我写了吧,你那同学学数据结构的顺序查找都不会吗?

顺序查找,二分查找和哈希查找算法,它们各自的特点是:
1.对比顺序查找的特点就是从表的第一个元素开始一个一个向下查找,如果有和目标一致的元素,查找成功;如果到最后一个元素仍没有目标元素,则查找失败。
2.二分查找的特点就是从表中间开始查找目标元素。如果找到一致元素,则查找成功。如果中间元素比目标元素小,则仍用二分查找方法查找表的后半部分(表是递增排列的),反之中间元素比目标元素大,则查找表的前半部分。
3.哈希算法的特点是是使用给定数据构造哈希表,然后在哈希表上进行查找的一种算法。先给定一个值,然后根据哈希函数求得哈希地址,再根据哈希地址查找到要找的元素。是通过数据元素的存储地址进行查找的一种算法。


顺序表的顺序查找和二分查找?
1.对比顺序查找的特点就是从表的第一个元素开始一个一个向下查找,如果有和目标一致的元素,查找成功;如果到最后一个元素仍没有目标元素,则查找失败。2.二分查找的特点就是从表中间开始查找目标元素。如果找到一致元素,则查找成功。如果中间元素比目标元素小,则仍用二分查找方法查找表的后半部分(表...

顺序查找与二分查找针对的都是无序数据集。对不对
不对,二分查找针对的是有序数据集。二分查找过程:首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复...

编写无序顺序表顺序查找、有序顺序表顺序查找、二分查找算法。用c语言...
int low=0,high=b-1,mid,i;int s=n\/b; \/\/每块记录个数 while(low<=high){ \/\/在索引表中进行二分查找,找到的位置放在low中 mid=(low+high)\/2;if(index[mid].key<k) low=mid+1;else high=mid-1;} if(low<b){ \/\/在顺序表中顺序查找 for(i=index[low].link;i<=index[...

链表适用于( )查找
顺序 线性表的查找有顺序查找和二分法查找两种。由于链表不能随机访问,要访问某个节点,必须从它直接前驱的指针域出发才能找到。因此,链式存储的线性表,即使是有序表,也只能使用顺序查找法。顺序查找是按照序列原有顺序对数组进行遍历比较查询的基本查找算法。对于任意一个序列以及一个给定的元素,将给定...

数据结构与算法顺序查找和折半查找
有序表的顺序查找:假设表L是按关键字从小到大排列的,查找的顺序是从前往后,待查找元素的关键字为key。当查找到第i个元素时,发现第i个元素对应的关键字小于key,但第i+1个元素对应的关键字大于key,这时就可以返回查找失败的信息。2.折半查找 又称二分查找,它仅适用于有序的顺序表 首先将给定...

...A.顺序查找与二分查找均只是适用于顺序表 B.顺序查
顺序查找法适用于无序表、链式存储的表以及有序顺序表;二分查找法要求是顺序存储的有序表

二分查找的查找速度一定比顺序查找得快,这种说法对吗?为什么?
二分查找只适合于有序序列,顺序查找适合于所有的序列,一般情况下,对于有序序列,采用二分查找,它的速度是较为稳定的,不会超过log2(n)次查找,而对于顺序查找,它是不大稳定的,在1到n次之间,你说一定哪个快,这个没有什么意义。

求数据结构试验 线性表的顺序存储结构
查找:顺序表的顺序查找算法:int Seqsearch1(int r[],int n,int k){ r[0]=k;i=n;while(r[i]!=k)i--;return i;} 单链表的顺序查找算法:int Seqsearch2(Node<int> *first,int k){ p=first->next;j=1;while(p!=NULL&&p->data!=k){ p=p->next;j++;} if(p->data==k...

查找- 线性表的查找 - 分块查找
( )首先查找索引表 索引表是有序表 可采用二分查找或顺序查找 以确定待查的结点在哪一块 ( )然后在已确定的块中进行顺序查找 由于块内无序 只能用顺序查找 分块查找示例 【例】对于上例的存储结构 ( )查找关键字等于给定值K= 的结点 因为索引表小 不妨用顺序查找方法查找索引表 即首先将K依次...

顺序表查找指的是在顺序存储结构上进行查找
,因此在某些情况下仍然是一个实用的选择。为了提高查找效率,可以使用更复杂的查找算法(如二分查找、哈希表等),这些算法通常要求数据结构满足一定的条件(如有序、哈希函数等)。然而,顺序表查找的优势在于其简单性和对数据结构无特殊要求,使得它在一些基础应用或特定场景下仍然具有价值。

罗田县19362152674: .什么是顺序查找?什么是二分查找?什么是对半查找 -
王贫凯保: /*指定一个位置用该位置上的元素和数组元素进行比较.在内循环结束一次,该位置出现最值.*/public static void sort_1(int[] arr){for(int x=0; x<arr.length-1; x++){for(int y=x+1; y<arr.length; y++){if(arr[x]>arr[y]){ }}}}/*相邻两个元素...

罗田县19362152674: 对比顺序查找,二分查找和哈希查找算法,它们各自的特点是什么? -
王贫凯保:[答案] 1.对比顺序查找就是顺序的一个一个的比下去..1和2、1 和3、1和4...1和n2.二分查找就是先和最中间的元素比较 大于此元素时将起始下标设置为此元素下表 继续和右边的中间元素比较,直到查找成功位置 相反小于则和左边...

罗田县19362152674: 编写c语言:要求能实现顺序表的三种查找算法:顺序查找,二分查找,分块查找 -
王贫凯保: 二分查找和分块查找 顺序查找相当于遍历数组的所有元组,所以不需要排序 二分查找需要排序,因为每次都是和中间值比较,如果大于选中间值后面的部分继续二分查找,如果小于中间值则选前面的部分继续执行 分块查找中需要按照数值大小进行排序分块,虽然每个块中的大小可以不排序,但是块的取值区间是排序的.

罗田县19362152674: 顺序查找和二分查找 -
王贫凯保: 答案是A. 应用顺序查找法时,查找1需要比较1次;应用二分查找法时,查找1需要比较3次,总次数为4次.其他元素的总查找次数均超过4次.

罗田县19362152674: 二分查找的查找速度一定比顺序查找得快,这种说法对吗?为什么? -
王贫凯保: 错! 比如有5个数1,2,3,4,5 要查找1的话 线性查找只要一次 二分查找的话(是对有序数列查找) 首先,1与中间数3相比,一次类推,直到中间数为1为止,所以,需要两次如果对你有所帮助,请记得采纳最佳答案,谢谢!

罗田县19362152674: 在97个记录的由于顺序表中进行二分查找,最大比较次数是? -
王贫凯保: 在97个记录的由于顺序表中进行二分查找,最大比较次数是7次. 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法.但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列. 根据顺序表二...

罗田县19362152674: 【C语言】实现顺序表查找 -
王贫凯保: #include int MAX=100000; /*二分查找*/ int bs(int data[],int dvalue){int l,u,m;int p;l=0;u=MAX; for(;;){if(l>u)return -1;m=(l+u)/2;if (data[m]==dvalue){return m;}else if(data[m]>dvalue){u=m-1;}else{l=m+1;}}} /*顺序查找*/ int ss(int data[]...

罗田县19362152674: 要求能实现顺序表的三种查找算法:顺序查找,二分查找,散列查找(通过菜单实现) -
王贫凯保: 你有学过数据结构没有? 你看一下,看了有哪不懂的可以问我! 我再帮你解答,你这一下让我写程序,我没时间写啊! //我暂时就给你写了二分查找的,其它的过两天给你,我没时间写啊,一直都有课#include<iostream> using namespace std; ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网