对二分算法的理解及结对编程情况

一、对二分算法理解

二分算法,又称折半算法,是应用分治策略的典型例子。二分查找主要对有序序列进行对所指定数字的查找,通过不断缩小搜查范围,在比较中间的数后对左右两个数组进行相同操作,以得到最终的带查找数字。时间复杂度logn,对数组较大时能显著提高程序效率。

二、算法代码

#include <iostream>using namespace std;int main(){ int n,x; cin >> n; if(1<=n<=100){  int a[n];  for(int i=0;i<n;i++){      cin >> a[i];   }  cin >> x;  int left = 0;  int right = n-1;  int num = 0;  while(left<=right){   num++;   int mid = (left+right)/2;   if(x==a[mid]){    cout << mid << endl;       cout << num << endl;       return 0;   }   else if(x < a[mid]){       right = mid - 1;   }      else if(x > a[mid]){     left =  mid+1;   }       }  cout << "-1"<<endl;  cout << num << endl; } return 0;}三、结对编程情况通过与队友的合作,在敲代码的过程中减少了很多不必要的错误,同时也提高了思维能力,拓展另一个思路。

原文地址:https://www.cnblogs.com/RicardoY/p/9822411.html

时间: 2024-11-06 16:16:07

对二分算法的理解及结对编程情况的相关文章

对二分法思想的理解 及 结对编程情况汇报

一.对二分法思想的理解 1.特点:又称为折半算法,是分治策略的一个典型例子.主要是用于:在已排好序的n个元素组成的数组a[0:n-1]中,找出一个特定的元素x. 2.基本思想:(1)将n个元素分成个数大致相同相同的两半,然后取a[n/2]与x作比较. (2)如果x = a[n/2],则已找到x,返回下标并结束算法: 如果x < a[n/2],则只在数组a的左半部继续搜索x: 如果x < a[n/2],则只在数组a的右半部继续搜索x: 3.时间复杂度:在二分搜索算法中,x每进行比较,待搜索的数据

对二分法的理解和结对编程情况

一.对二分法的理解 基本思想:假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的左半段中查找;若x大于当前位置值则在数列的右半段中继续查找,直到找到为止. 时间复杂度: 最好情况:1次 最坏情况:O(log n)次 感想:二分算法充分利用了元素间的次序关系,采用分治策略,并且便于初学者学习理解.相对顺序查找这种方法的效率较高,它能在大多数的情况,例如数据量很大,并且有序的时候,实现更快的数据查找功能,也是比较常用且易于

对二分法的理解以及结对编程情况

一. 二分法思想 1. 要求 二分法要求线性表必须采用顺序存储结构,表中元素要按关键字有序排列. 2. 时间复杂度及分析体会 最好情况:1次 最坏情况:O(log n) 这种算法是一种典型的分治的策略,并且这种算法很利于理解,它利用了元素之间的次序关系.相对顺序查找这种方法的效率较高,它能在大多数的情况,例如数据量很大,并且有序的时候,实现更快的数据查找功能,也是比较常用且易于想到的一种算法实现. 3. 代码 #include <iostream>using namespace std;int

对二分思想的理解及结对编程

一.对二分法思想的体会 1.二分法是运用分治策略的典型例子,也称折半查找,充分利用了元素间的次序关系,是一种效率较高的查找方法.实现二分算法有递归和非递归两种方式. 2.基本思想:将n个元素分成大致相同的两半,取a[n/2]与x作比较.如果x=a[n/2],则找到x,算法终止:如果a<[n/2],则只在数组a的左半部分继续搜索x:如果x>a[n/2],则只在数组的右半部分继续搜索x. 3.代码实现: int BinarySearch(Type a[],const Type&x,int

二分算法 再次理解

二分算法 再次理解 详解二分查找算法 这篇博客很详细介绍了二分算法的一些细节问题 寻找一个数,也是最基本的二分搜索 //代码示例如下 int bsearch(int []nums, int target) { int left=0, right=nums.length-1;//这里的数组长度用法可以是其他的形式 while(left<=right) { int mid = left + (right - left) / 2; if(num[mid] == target) return mid;

对分治法思想的体会及结对编程情况汇报

1.对分治法思想的体会 分治法就是将问题分解为规模更小的子问题,通过一一解决这些子问题,再将这些已经解决了的子问题合并起来,就得到了原问题的解.通过分治法的思想,我们可以更加轻松的解决规模很大的问题,也使得代码更加清晰,易于理解.我们在大一的时候其实已经接触过分治法的思想了,像二分查找,就是利用了分治法思想,使得查找算法的时间复杂度更低. 2.结对编程情况汇报 我和我的搭档一般情况下是独立编程,但是当我们其中一个或着两个人遇到编程难题时,就会互相讨论,一起寻找合适的算法去解决问题. 在之后的学习

第二章总结和结对编程情况

第二章总结 1.递归 1.1递归是什么:递归是自己定义自己,直接或间接地调用自己的算法. 1.2递归常见类型:多变元递归.多步递归.嵌套递归.联立递归. 1.3优点:可读性强,结构清晰,为调试提供很大便利: 缺点:运行效率较低,空间复杂度和时间复杂度都耗费比较大. 2.分治 2.1分治是什么:把一个问题分成若干个相同的子问题,对子问题进行求解. 2.2.分治思想三个阶段:一个较大问题划分为多个子问题.求解子问题.合并子问题的解,形成原始问题的解. 2.3时间复杂度:当 n = 1 时,T(n)

对二分法思想的体会及结对编程情况汇报

一.对二分法思想的体会 二分法主要用于有序数组中查找元素,其时间复杂度相比之下更小. 不断变换指针位置缩小查找区间范围. 其主要代码为: 二.结对编程情况汇报 和能力强的同学一起组队,有很多值得学习的地方,比如算法思想.代码风格,甚至快捷键的使用. 探讨思想后合作完成代码,可以理清思路再动手实践,收获颇丰. 原文地址:https://www.cnblogs.com/Wqxxxx--/p/9795146.html

对分治法思想的体会 &amp; 结对编程情况汇报

一.对分治思想的体会 1.帮助我们解决问题. 分治法,对大的问题拆封成规模较小的问题,我们求解小问题,再把小问题的答案合并起来,得出大问题的答案.大问题思考起来比较乱,犯迷糊,不易想到解决方法,比如汉诺塔问题.分解成小问题,我们就容易想出方法来解决问题 2.时间复杂度低 分治法思想核心是递归,递归的时间复杂度低.算法的复杂度低,提高了算法的质量 二.结对编程情况汇报 3道题都做完且答案正确,第三道题,没有按时间复杂度为O(logn)编程,后来查找资料知道如何写出O(logn)的算法.第一题,开始