Advertisement
Guest User

Untitled

a guest
Feb 21st, 2017
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.02 KB | None | 0 0
  1. public class BinarySearch {
  2.     static int x, n;
  3.     static int[] a;
  4.     public static void main(String[] args) {
  5.         x = Integer.valueOf(args[0]);  
  6.         n = args.length - 1;
  7.         if(n == 0) {
  8.             System.out.println("0");
  9.             return;
  10.         }
  11.         a = new int[n];
  12.         for (int i = 0 ; i < n ; ++i) {  
  13.             // inv: 0 <= i <= n - 1
  14.             a[i] = Integer.valueOf(args[i + 1]);
  15.         }
  16.  
  17.         int res1 = BinarySearchWithoutRecursion();
  18.         int res2 = BinarySearchWithRecursion(0, n);
  19.  
  20.         System.out.println(res2);
  21.     }
  22.     // n = a.size()
  23.     // R = result
  24.     // prec: (0 < i < n : a[i - 1] >= a[i]) && 0 <= l <= r <= n
  25.     // post: ((R < n && a[R] <= x) || (R == n && a[n - 1] > x)) || ((R == 0 && x >= a[0]) || (R > 0 && a[R - 1]  > x))
  26.     public static int BinarySearchWithRecursion(int l, int r) {          
  27.         if(l == r) {
  28.             // prec: (0 < i < n : a[i - 1] >= a[i]) && l == r && 0 <= l <= r <= n && (l == r == n || x >= a[r]) && (l == r == 0 || a[l] > x)                                                   
  29.             return r;
  30.             // R = r
  31.         }
  32.         // prec: (0 < i < n : a[i - 1] >= a[i]) && 0 <= l < r <= n && (r == n || x >= a[r]) && (l == 0 || a[l] > x)
  33.         int mid = (l + r) / 2;
  34.         // prec: (0 < i < n : a[i - 1] >= a[i]) && 0 <= l < r <= n && (r == n || x >= a[r]) && (l == 0 || a[l] > x) && mid == (l + r) / 2
  35.         if(a[mid] > x) {  
  36.             // prec: (0 < i < n : a[i - 1] >= a[i]) && 0 <= l < r <= n && (r == n || x >= a[r]) && (l == 0 || a[l] > x) && mid == (l + r) / 2  && a[mid] > x
  37.             return BinarySearchWithRecursion(mid + 1, r);
  38.         } else {
  39.             // prec: (0 < i < n : a[i - 1] >= a[i]) && 0 <= l < r <= n && (r == n || x >= a[r]) && (l == 0 || a[l] > x) && mid == (l + r) / 2  && a[mid] <= x
  40.             return BinarySearchWithRecursion(l , mid);
  41.         }
  42.     }
  43.     // n = a.size()
  44.     // R = result
  45.     // prec: (0 < i < n : a[i - 1] >= a[i])
  46.     // post: ((R < n && a[R] <= x) || (R == n && a[n - 1] > x)) || ((R == 0 && x >= a[0]) || (R > 0 && a[R - 1]  > x))
  47.     public static int BinarySearchWithoutRecursion() {
  48.         // prec: (0 < i < n : a[i - 1] >= a[i])
  49.         int l = 0, r = n;
  50.         // prec: (0 < i < n : a[i - 1] >= a[i]) && l == 0 && r == n
  51.         while(l < r) {
  52.             // inv: (0 < i < n : a[i - 1] >= a[i]) && 0 <= l < r <= n && (r == n || x >= a[r]) && (l == 0 || a[l] > x)
  53.             int mid = (l + r) / 2;
  54.             // prec: (0 < i < n : a[i - 1] >= a[i]) && 0 <= l < r <= n && (r == n || x >= a[r]) && (l == 0 || a[l] > x) && mid == (l + r) / 2
  55.             if(a[mid] > x) {
  56.                 // prec: (0 < i < n : a[i - 1] >= a[i]) && 0 <= l < r <= n && (r == n || x >= a[r]) && (l == 0 || a[l] > x) && mid == (l + r) / 2  && a[mid] > x
  57.                 l = mid + 1;
  58.                 // prec: (0 < i < n : a[i - 1] >= a[i]) && 0 <= l < r <= n && (r == n || x >= a[r]) && (l == 0 || a[l] > x) && mid == (l + r) / 2  && a[mid] > x && l == mid + 1
  59.             } else {
  60.                 // prec: (0 < i < n : a[i - 1] >= a[i]) && 0 <= l < r <= n && (r == n || x >= a[r]) && (l == 0 || a[l] > x) && mid == (l + r) / 2  && a[mid] <= x
  61.                 r = mid;
  62.                 // prec: (0 < i < n : a[i - 1] >= a[i]) && 0 <= l < r <= n && (r == n || x >= a[r]) && (l == 0 || a[l] > x) && mid == (l + r) / 2  && a[mid] <= x && r == mid
  63.             }
  64.         }
  65.         return r;
  66.         // R == r      
  67.     }
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement