二分法的学习

1、二分法的查找

一般而言,二分法是在数组当中,且数组的内部也是已经做好了从大到小或者从小到大的排序了,我们需要在这些排序中找到我们需要的数值。

 

int binart(int *a, int key, int n)
{
    int left = 0, right = n - 1,mid = 0;

    mid = (left + right) / 2;
    while ((left<right)&& a[mid]!=key)
    {
        if (a[mid]<key)
        {
            left = mid + 1;
        }
        else if ( a[mid] > key)
        {
            right = mid - 1;
        }

        mid = (left + right) / 2;
    }
    if ( a[mid] == key)
    {
        return mid;
    }

    return -1;
}

 

2、二分法查找的次数

二分法查找的几次,范围是 f,而查找的步数 是 s,那么,s = log2(f) + 1; 这里的 log 是以 2 为低。所以当范围是 100  的时候,查找的次数就是 7,而当范围是 1000 的时候,查找的次数就是10.

时间: 2024-11-01 16:16:04

二分法的学习的相关文章

对二分法的学习体会以及关于结对编程的体验分享

1) 二分搜索技术 二分搜索算法是运用分治策略的典型例子.二分搜索方法充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(logn)时间完成搜索任务. 问题描述:给定已排好序的n个元素a[0: n-1],现要在这n个元素中找出特定的元素x. 解决方法: a) 顺序搜索方法:逐个比较a[0: n-1]中元素,直至找出元素或搜索整个数组后确定x不在其中.该方法没有很好地利用n个元素已排好序这个条件,因此在最坏的情况下,顺序搜索方法需要O(n) 次比较. b) 二分搜索方法:将n个元素分成

poj2109Power of Cryptography

背景:题目不难,但由于是第一次用二分法写代码,在结束条件那个地方纠结了半天. 思路:简单二分法. 学习:二分法:当数据量很大适宜采用该方法.采用二分法查找时,数据需是排好序的.主要思想是:(设查找的数组区间为array[low, high])(1)确定该期间的中间位置K(2)将查找的值T与array[k]比较.若相等,查找成功返回此位置:否则确定新的查找区域,继续二分查找.区域确定如下:a.array[k]>T 由数组的有序性可知array[k,k+1,--,high]>T;故新的区间为arr

长久养成的打卡习惯可千万不能丢呀

哎呀呀哎呀呀,没想到距离上一次打卡已经过去N天了,这N天有点难熬呀.一边赶着项目,一边又盯着留言,生怕有人催更,这不,昨天就有留言来催更了,哈哈哈哈.真的是想什么来什么. 简单说下这N天的状况哈,国庆去了趟西安,聆听了西安的历史,感觉棒棒哒.但是,西安和浙江国庆期间温度天壤之别,小编回到浙江之后,就华丽丽地躺下了.我平时也很注重锻炼的呀,每周的篮球,跑步都不间断,没想到还是没抗住,身体素质贼差,程序员果然还需要多动多动多动. 加上忙着准备项目的优化,重构还有一些琐事(我是真的努力地在找理由有木有

学习python的第十七天(二分法,有名函数,匿名函数,内置函数)

06.04 学习总结 一.二分法 二分法个人理解是一种算法的方式在一个有序的序列,区中间值,把中间值与想要的值进行对比从而一次一次的减少搜索范围举例 #给与一个列表1-100, num_list = [num fornum in range(1,101)] #给予一个num让你在列表中寻找他 mid_num_index = int(len(num_list)/2) mid_num = num_list[mid_num_index] if len(num_list)==1: if num_list

新手算法学习之路----二分法Find Minimum in Rotated Sorted Array

题目:假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2). 你需要找到其中最小的元素. 你可以假设数组中不存在重复的元素. 思路:首先排除三种极端情况,空,只有一个元素,以及整个数组都是顺序排列的. 当顺序的数组随机旋转排列后,就分为两个顺序列入题目中的4567和012,寻找到中间数来和数组最后一个元素对比,如果大于的话说明最小的数在中间数的右边,如果小于的话说明最小数在中间数的左边,然             后继续按照二分法来找.

算法学习之查找(顺序、二分法、排序二叉树以及 Hash 表)

[摘要]查找--用关键字标识一个数据元素,查找时根据给定的某个值,在表中确定一个关键字的值等于给定值的记录或数据元素.在计算机中进行查找的方法是根据表中的记录的组织结构确定的.查找功能数据处理的一个基本功能.数据查找并不复杂,但是如何实现数据又快又好地查找呢?前人在实践中积累的一些方法,值得我们好好学些一下.我们假定查找的数据唯一存在,数组中没有重复的数据存在. 1. 顺序查找 设想有一个1M的数据,我们如何在里面找到我们想要的那个数据.此时数据本身没有特征,所以我们需要的那个数据可能出现在数组

算法学习笔记(一):二分法及其实现

基本思想:二分法的一个前提是序列已经是有序的,然后将待查找值与序列的中点比较.根据比较结果,选择下一步比较的部分.二分查找(binary search)就是一个不断重复这一查找过程,直到找到这个值. 算法复杂度:O(lgn) 算法实现: 一:迭代法 int bin_search_iteration(int arr[],int start,int end,int x) { while (start<end) { int mid = (start + end) / 2; if (arr[mid]<

新手算法学习之路----二分法Search-A-2D-Matrix

题目:      写出一个高效的算法来搜索 m × n矩阵中的值. 这个矩阵具有以下特性: 1 每行中的整数从左到右是排序的. 2 每行的第一个数大于上一行的最后一个整数. 考虑下列矩阵: [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ] 给出 target = 3,返回 true  解题思路: 首先在第一列上面找到target值所在的行号,可以先找到第一个大于target的行号,那么target值肯定在上一行(如果含有多行):然后,根据查

新手算法学习之路----二分法SmallestRectangle

题目:一个二维数组里面是由1和0构成的,里面所有的1都是相互关联的,有且只有一块由连续1构成的区域,请找出来最小能包括所有1的矩形, 前提:给出一个任意二维数组以及其中的一个1的元素的x和y坐标. 0,1,1,0 例如:int [2][3]a={{0,0,1,0},     1   这一行含有1,映射到行边上为1 {0,1,1,0},      1   同上 {0,1,0,0}}      1   同上 解题思想:如上面的例子里面,如果一列里面有1就映射到第一行对应的位置   如上面二维数组将所