📓 Archive

  • Pricing
  • Chess
  • Syntax
  • BINARY-SEARCH

    FGJ: Create:2024/01/07 Update: [2024-11-21]

    implement #

    import org.junit.Assert;
    import org.junit.Test;
    
    public class BinarySearch {
    
        @Test
        public void testBinarySearch(){
            int[] arr = new int[]{4,8,10, 16,18,20,50,100};
    
            Assert.assertEquals("", binarySearch(arr, 0, arr.length - 1, 4), 0);
            Assert.assertEquals("", binarySearch(arr, 0, arr.length - 1, 16), 3);
            Assert.assertEquals("", binarySearch(arr, 0, arr.length - 1, 100), 7);
            Assert.assertEquals("", binarySearch(arr, 0, arr.length - 1, 12302), -1);
        }
    
        private static int binarySearch(int[] arr, int left, int right, int key) {
            if(left > right) { return -1;}
    
            int mid = (left + right) / 2;
            int midKey = arr[mid];
    
            if(key > midKey){ return binarySearch(arr, mid + 1, right, key); }
    
            // right = mid - 1 才对,不然会发生 StackOverflowError, 比如: Assert.assertEquals("", binarySearch(arr, 0, arr.length - 1, 2), -1);
            // if(key < midKey){ return binarySearch(arr, left, mid, key); }
            if(key < midKey){ return binarySearch(arr, left, mid - 1, key); }
            return mid;
        }
    }
    

    Reference #


    comments powered by Disqus