二分入门--二分知识 及 几种情况

来源:互联网 发布:最新网络角色游戏 编辑:程序博客网 时间:2024/05/21 04:40

二分排序


  1. 时间复杂度是 log n 最坏的情况下是 n


  2. 一个条件是带查询数组是有序的,分两种 一升序 而降序


  3. 主要思路就是指定两个指针start end 分别指向数组元素的两端,然后比较数组中间的arrat【mid】 和待查找元素,n<a[mid]  则根据升序降序 去缩减区间 改变start 和end来实现。


/*

 

直接找到某值在右若干个 n时 找n 以下是 若找到中间值是n则输出

 

   本程序主要意思是输出要找的值的左边的一个值(当此值不存在时)

 

 

 

#include<bits/stdc++.h>using namespace std; <<二分找某值+详解.txt>>  int fun(int a[],intlen,int n){intl=1,h=len,mid=0;while(l<h)            //l<h    就是当 1 2 3 4 5 6 7   到5---7时找到中间值为6条件使mid-1 因此l=h结束while 循环   //l<=h  时输出l   为4 但输出h就为l-1  因为当h<l条件便结束{mid=(l+h)/2;if(a[mid]==n)returna[mid];elseif(a[mid]>n){h=mid-1;cout<<"左边边界变为"<<l<<"右边边界变为"<<h<<endl;}else{l=mid+1;cout<<"左边边界变为"<<l<<"右边边界变为 "<<h<<endl;}}returnl;} int main(){intn,a[10000],i,m;while(cin>>n){for(i=1;i<=n;i++)cin>>a[i];cin>>m;cout<<fun(a,n,m)<<endl;}return0;}




#include<bits/stdc++.h>using namespace std; int fun(int a[],intn,int len)<<二分之找元素下标.txt>>{intl=0,h=len;intmid=0;while(l<=h){mid=(l+h)>>1;if(n==a[mid])returnmid;elseif(n<a[mid])h=mid-1;elsel=mid+1;    }    return -1;} int main(){inti,k;  inta[1000];intn;while(cin>>n){for(i=0;i<n;i++)cin>>a[i];cin>>k;cout<<fun(a,k,n)<<endl;}return0;}二分之找元素下标



#include<bits/stdc++.h>using namespace std; int fun(int a[],intlen,int n){intl=1,h=len,mid=0;while(l<=h){mid=(l+h)/2;if(n<=a[mid]){h=mid-1;}else{l=mid+1;}}returnl=n?l:-1;} int main(){intn,i;intm; inta[10000];while(cin>>n){for(i=1;i<=n;i++)cin>>a[i];cin>>m;cout<<fun(a,n,m)<<endl;}return 0;}1.2 查找第一个大于等于某个数的下标


原创粉丝点击