修改BinarySearch,使用Counter统计大有查找中被检查的键的总数并在查找全部结束后打印该值。
/** * Description : * Author : mn@furzoom.com * Date : Sep 26, 2016 4:49:49 PM * Copyright (c) 2013-2016, http://furzoom.com All Rights Reserved. */ package com.furzoom.lab.algs.ch102; import java.util.Arrays; import edu.princeton.cs.algs4.Counter; import edu.princeton.cs.algs4.In; import edu.princeton.cs.algs4.StdIn; import edu.princeton.cs.algs4.StdOut; /** * ClassName : E10209 <br> * Function : TODO ADD FUNCTION. <br> * date : Sep 26, 2016 4:49:49 PM <br> * * @version */ public class E10209 { public static int rank(int key, int[] a, Counter counter) { int lo = 0; int hi = a.length - 1; while (lo <= hi) { counter.increment(); int mid = lo + (hi - lo) / 2; if (key < a[mid]) { hi = mid - 1; } else if (key > a[mid]) { lo = mid + 1; } else { return mid; } } return -1; } public static void main(String[] args) { In in = new In(args[0]); int key = Integer.parseInt(args[1]); int[] whitelist = in.readAllInts(); Counter c = new Counter("binary search"); Arrays.sort(whitelist); rank(key, whitelist, c); System.out.println(c); } }
结果:
D:proj>java -cp ".;../lib/algs4.jar" com .furzoom.lab.algs.ch102.E10209 com/furzoom/lab/algs/ch101/tinyW.txt 100 5 binary search