二分

14.二分

#include<stdio.h>

int a[100000];

int main(){

   int n;

   scanf("%d",&n);

   for (int i=0;i<n;i++){

    scanf("%d",&a[i]);

   }

   int m;

   scanf("%d",&m);

   int l=0;//l从0开始

   int r=n-1;//r从n-1;

   int mid;

   while(l<=r){

    mid=(l+r)/2;

    if(a[mid]==m) break;

    if(a[mid]>m) l=mid+1;//+1

    else r=mid-1;//-1

   }

   printf("%d ",mid+1);

return 0;

}

15.查找第一个等于或者大于key的元素

 查找第一个等于或者大于key的元素,也就是说等于查找key值的元素有好多个,返回这些元素最左边的元素下标;如果没有等于key值的元素,则返回大于key的最左边元素下标。

#include<stdio.h>

int seach(int key){

   int l=0;

   int r=n-1;

   while(l<=r){

    int mid=(l+r)/2;

    if(a[mid]>=key)

        r=mid-1;

    else l=mid+1;

   }

   return l;

}

16.查找第一个大于key的元素

查找第一个等于key的元素,也就是说返回大于key的最左边元素下标。

#include<stdio.h>

int seach(int key){

   int l=0;

   int r=n-1;

   while(l<=r){

    int mid=(l+r)/2;

    if(a[mid]>key)

        r=mid-1;

    else l=mid+1;

   }

   return l;

}

17.查找最后一个小于key的元素

查找最后一个小于key的元素,也就是说返回小于key的最右边元素下标。

#include<stdio.h>

int seach(int key){

   int l=0;

   int r=n-1;

   while(l<=r){

    int mid=(l+r)/2;

    if(a[mid]>=key)

        r=mid-1;

    else l=mid+1;

   }

   return r;

}

18.查找最后一个等于或者小于key的元素

查找最后一个等于或者小于key的元素,也就是说等于查找key值的元素有好多个,返回这些元素最右边的元素下标;如果没有等于key值的元素,则返回小于key的最右边元素下标。

#include<stdio.h>

int seach(int key){

   int l=0;

   int r=n-1;

   while(l<=r){

    int mid=(l+r)/2;

    if(a[mid]>key)

        r=mid-1;

    else l=mid+1;

   }

   return r;

}

19.查找最后一个与key相等的元素

查找最后一个相等的元素,也就是说等于查找key值的元素有好多个,返回这些元素最右边的元素下标。

#include<stdio.h>

int seach(int key){

   int l=0;

   int r=n-1;

   while(l<=r){

    int mid=(l+r)/2;

    if(a[mid]<=key)

        r=mid-1;

    else l=mid+1;

   }

   if (r >= 0 && a[r] == key) {

        return r;

    }

 

   return -1;

}

20.查找第一个与key相等的元素

查找第一个相等的元素,也就是说等于查找key值的元素有好多个,返回这些元素最左边的元素下标。

#include<stdio.h>

int seach(int key){

   int l=0;

   int r=n-1;

   while(l<=r){

    int mid=(l+r)/2;

    if(a[mid]>=key)

        r=mid-1;

    else l=mid+1;

   }

   if (left < n && a[l] == key) {

        return l;

    }

   return -1;

}

 

 

 

原文地址:https://www.cnblogs.com/lmjer/p/7582851.html