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

二分查找算法

发布时间: 2022-01-13 16:40:39

① 如果数据分布不均匀,怎么优化二分查找算法

楼主是不是想求出一个最小半径的圆,圆内包含所有的点?这个问题很有趣。

寻找这个圆的时候注意一下几点:
1.这个圆必然穿过图中某些靠外围的点,这样才是最小半径的圆。
2.几何中我们知道,三个点可以确定一个圆, 我们就是需要找出这三个点来.

算法如下:1.先求这些点对应的凸包,已经有现成的算法。
2.生成凸包后,在看凸包上哪三点确定的圆可以包含凸包。

当然如果楼主讨论的不是以上所述,而是模式分类的话,建议看看数据分类方法。可以搜索关键字:Gaussian mixtrual model, expectation-maximization algorithm 和 k-mean algorithm 学习下相关的知识。

② 求助:二分查找算法流程图,在Raptor中实现该算法

二分查找算法流程图,实现核算法

③ 二分查找算法

前提要求数据排好序,有递归和非递归版本
int binSearch(const int *Array,int start,int end,int key)
{
int left,right;
int mid;
left=start;
right=end;
while (left<=right) { /注释中为递归算法,执行效率低,不推荐
mid=(left+right)/2;
/* if (key<Array[mid]) {
return(binSearch(Array,left,mid,key));
}
else if(key>Array[mid]){
return (binSearch(Array,mid+1,right,key));
}
else
return mid;
*/
if (key<Array[mid]) {
right=mid-1;
}
else if(key>Array[mid]){
left=mid+1;
}
else
return mid;
}
return -1;
}

④ 二分查找的算法要求

必须采用顺序存储结构 2.必须按关键字大小有序排列。

⑤ C语言 二分查找算法 用递归实现 我改动了一下

本人直接打出来的,并未在平台上编译运行过,所以可能会有语法错位,还请自行调试更改
#include<stdio.h>

int RecorBinarySearch(int a[], int, int, int);
int main(void)
{
int i=0, n, m, key;
int a[10000], c[10000];

scanf("%d", &n);
scanf("%d", &m);

printf("提示:输入%d个整数且必须按升序排列。\n", n);
for(i=0; i<n; i++){
scanf("%d", &a[i]);
}
printf("提示:输入%d个预查找的数。\n", m);
for(i=0; i<m; i++){
scanf("%d", &key);
c[i] = RecorBinarySearch(a, key, 0, n-1);
}
printf("提示:输出预查找的数在数组中的位置。(-1代表未找到)\n");
for(i=0; i<m; i++) {
printf("%d ", c[i]);
}
return 0;
}

int RecorBinarySearch(int a[], int key, int low, int high)
{
int nRet;
if(low > high)
nRet = -1;
else {
int mid = (high + low) / 2;
if(key == a[mid])
nRet = mid;
else if(key > a[mid])
nRet = RecorBinarySearch(a, key, mid+1, high);
else if(key < a[mid])
nRet = RecorBinarySearch(a, key, low, mid-1);
}
return nRet;
}

⑥ 数据结构中关于二分查找算法的题目(请写出详细解题步骤)

因为二分查找每次都会把范围缩小一半,最坏情况下一直折半 直到只剩下一个元素,那么比较了 log₂N次,因为最后剩一个元素时,也要执行查找过程,所以+1,即 log₂N + 1 次。

⑦ C#二分查找算法

二分查找的基本思想是:(设R[low..high]是当前的查找区间)
(1)首先确定该区间的中点位置:mid=(low+high)/2
(2)然后将待查的K值与R[mid].key比较:若相等,则查找成功并返回此位置,否则须确定新的查找区间,继续二分查找
// Source:
public int search(int[] q)
{
int i, low = 0, high = q.Length - 1, middle;
Console.Write("请输入想要查找的数字:");
i=int.Parse(Console.ReadLine());
while (low <= high)
{
middle = (low + high) / 2;
if (i == q[middle])return i;
if (i < q[middle])high = middle - 1;
else low = middle + 1;
}
throw new Exception("数组中不存在这个数。");
}

⑧ 二分查找

#include <stdio.h>

int BinarySearch(int * R,int n,int key) // 在长度为n的数组R中查找关键字key
{
int low=0,high=n-1,mid;
while(low<=high)
{
mid=(low+high)/2;
if(key<R[mid])
{
printf("R[mid]=%d <\n",R[mid]);
high=mid-1;
}
else if(key>R[mid])
{
printf("R[mid]=%d >\n",R[mid]);
low=mid+1;
}
else
{
printf("R[mid]=%d =\n",R[mid]);
return mid; // 返回查找到的索引值
}
}
return -1;
}

void main()
{
int R[]={1,2,3,5,7,8,10,15,16,17,19,20};
printf("%d\n",BinarySearch(R,12,17)); // 测试在数组R中查找17,并输出索引号
}

热点内容
支付密码怎么破解 发布:2024-10-18 11:09:19 浏览:144
线性链表c语言 发布:2024-10-18 11:09:17 浏览:784
淘宝卖的脚本可靠吗 发布:2024-10-18 10:54:04 浏览:119
数质数算法 发布:2024-10-18 10:53:26 浏览:281
安卓11有的地方怎么那么卡 发布:2024-10-18 10:53:21 浏览:478
苹果怎么设置程序加密 发布:2024-10-18 10:52:41 浏览:101
idea重启自动编译 发布:2024-10-18 10:52:41 浏览:448
康佳按摩椅蓝牙配对密码是多少 发布:2024-10-18 10:50:56 浏览:193
小米笔记本pro加存储 发布:2024-10-18 10:49:23 浏览:839
光遇安卓服如何调画质 发布:2024-10-18 10:43:20 浏览:680