当前位置:首页 » 操作系统 » 二分算法无序

二分算法无序

发布时间: 2025-05-15 05:18:22

① 用C语言编写顺序查找和二分查找(折半查找)

顺序查找:在一个已知无序队列中找出与给定关键字相同的数的具体位置。原理是让关键字与队列中的数从第一个开始逐个比较,直到找出与给定关键字相同的数为止。复杂度为o(n).

二分查找又称折半查找,它是一种效率较高的查找方法。
【二分查找要求】:1.必须采用顺序存储结构 2.必须按关键字大小有序排列。
【优缺点】折半查找法的优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。
算法思想】首先,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。
重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
【算法复杂度】假设其数组长度为n,其算法复杂度为o(log(n))

#include <stdio.h>

//二分查找:
int search(int a[],int x,int n) //x为要查找的元素,n为数组长度
{
int mid=0;
int low=0;
int high=n;
while(low<=high)
{
mid=(low+high)/2;
if(a[mid]==x)
{ return mid; }
else if(x<a[mid])
{ high=mid-1; }
else
{ low=high+1; }
}
return -1;
}
//顺序查找:
int search1(int a[],int x,int n) //x为要查找的元素,n为数组长度
{
int i;
for(i=0;i<n;i++)
{
if(a[i]==x)
return i;
}
return -1;
}

int main()
{
int i,a[10],x;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("请输入要查找的元素");
scanf("%d",&x);
if(search(a,x,10)!=-1)printf("查找的元素在数组中的位置为%d.\n",search(a,x,10));
else printf("该元素不在数组中\n");
if(search1(a,x,10)!=-1)printf("查找的元素在数组中的位置为%d.\n",search1(a,x,10));
else printf("该元素不在数组中\n");
return 0;
}

② 二分查找算法

二分查找算法,该算法要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。如果一个序列是无序的或者是链表,那么该序列就不能使用二分查找。

二分查找算法原理:若待查序列为空,则返回-1,并退出算法;若待查序列不为空,则将它的中间元素与目标数值进行比较,判断是否相等;若相等,则返回中间元素索引,并退出算法;此时已查找成功。若不相等,则比较中间元素与目标数值的大小。

二分查找的一个技巧是:不要出基升亮现else,而是把所有情况用else,if写清楚,这样可以清楚地展现所有细节。本文都会使用else,if,旨在讲清楚搏宽,读者理解后可自行简化。

热点内容
android添加sdk 发布:2025-05-15 08:59:20 浏览:5
oracle数据导入sql 发布:2025-05-15 08:55:00 浏览:49
最适合做的脚本 发布:2025-05-15 08:54:27 浏览:380
太原php培训班 发布:2025-05-15 08:41:38 浏览:937
豌豆服务器地址 发布:2025-05-15 08:34:56 浏览:712
linux下php编译安装 发布:2025-05-15 08:30:37 浏览:592
c语言八进制十六进制 发布:2025-05-15 08:22:17 浏览:282
华为安卓如何更新鸿蒙 发布:2025-05-15 08:18:52 浏览:373
工商密码器是什么 发布:2025-05-15 08:18:50 浏览:752
c语言自考 发布:2025-05-15 07:52:42 浏览:501