1. 程式人生 > >SUMMARY | 二分查找

SUMMARY | 二分查找

val sys d+ key tar color right left package

package Search;

public class biSearch {
    //標準的二分查找
    public static int stdBiSearch(int[] array,int keyValue) {
        int length=array.length;
        int left=0,right=length-1;
        while(left<=right){
            int mid=(left+right)/2;
            if(keyValue<array[mid]) right=mid-1;
            
else if(keyValue>array[mid]) left=mid+1; else return mid; } return -1; } //(二分法)查找第一個小於keyValue的元素 public static int BiSearchToFindFirstSmaller(int[] array,int keyValue) { int length=array.length; int left=0,right=length-1; while(left<=right){
int mid=(left+right)/2; if(keyValue<=array[mid]) right=mid-1; else left=mid+1; } return right; } //(二分法)查找第一個大於等於keyValue的元素 public static int BiSearchToFindFirstBiggerorEqual(int[] array,int keyValue) { int length=array.length;
int left=0,right=length-1; while(left<=right){ int mid=(left+right)/2; if(keyValue<=array[mid]) right=mid-1; else left=mid+1; } return left; } //(二分法)查找第一個最後一個小於等於keyValue的元素 public static int BiSearchToFindLastSmallerorEqual(int[] array,int keyValue) { int length=array.length; int left=0,right=length-1; while(left<=right){ int mid=(left+right)/2; if(keyValue<array[mid]) right=mid-1; else left=mid+1; } return right; } //(二分法)查找第一個第一個大於keyValue的元素 public static int BiSearchToFindFirstBigger(int[] array,int keyValue) { int length=array.length; int left=0,right=length-1; while(left<=right){ int mid=(left+right)/2; if(keyValue<array[mid]) right=mid-1; else left=mid+1; } return left; } //(二分法)查找第一個第一個等於keyValue的元素 public static int BiSearchToFindFirst(int[] array,int keyValue) { int length=array.length; int left=0,right=length-1; while(left<=right){ int mid=(left+right)/2; if(keyValue<=array[mid]) right=mid-1; else left=mid+1; } //array[right]<keyValue<=array[left] if(left<length&&array[left]==keyValue) return left; else return -1; } //(二分法)查找第一個最後一個等於keyValue的元素 public static int BiSearchToFindLast(int[] array,int keyValue) { int length=array.length; int left=0,right=length-1; while(left<=right){ int mid=(left+right)/2; if(keyValue<array[mid]) right=mid-1; else left=mid+1; } //array[right]<=keyValue<array[left] if(right>=0&&array[right]==keyValue) return right; else return -1; } //測試樣例 public static void main(String[] args) { int[] a=new int[]{0,1,2,2,2,5,6}; System.out.println(BiSearchToFindLast(a, 2)); } }

一張圖幫助理解:

技術分享圖片

參考博客地址:https://www.cnblogs.com/bofengyu/p/6761389.html

SUMMARY | 二分查找