CSC300: Printing lo and hi [7/8] |
01 |
public static boolean contains (double val, double[] list) { int lo = 0; int hi = list.length - 1; while (lo <= hi) { StdOut.format("%4d/%4d \n", lo, hi); int mid = lo + (hi-lo)/2; if (val > list[mid]) lo = mid + 1; else if (val < list[mid]) hi = mid - 1; else return true; } StdOut.format("%4d/%4d \n", lo, hi); return false; } |
Output
[0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0,... 0/1022 512/1022 768/1022 896/1022 960/1022 992/1022 1008/1022 1016/1022 1020/1022 // yes 0/1022 0/ 510 0/ 254 128/ 254 128/ 190 160/ 190 176/ 190 184/ 190 // yes 0/1022 0/ 510 0/ 254 0/ 126 0/ 62 32/ 62 32/ 46 32/ 38 36/ 38 38/ 38 39/ 38 // NO 0/1022 0/ 510 256/ 510 256/ 382 320/ 382 320/ 350 336/ 350 336/ 342 340/ 342 342/ 342 343/ 342 // NO 0/1022 0/ 510 256/ 510 256/ 382 320/ 382 320/ 350 336/ 350 336/ 342 336/ 338 338/ 338 339/ 338 // NO 0/1022 512/1022 768/1022 896/1022 896/ 958 896/ 926 896/ 910 904/ 910 904/ 906 904/ 904 904/ 903 // NO 0/1022 0/ 510 0/ 254 128/ 254 128/ 190 160/ 190 160/ 174 168/ 174 168/ 170 // yes 0/1022 0/ 510 0/ 254 0/ 126 0/ 62 32/ 62 32/ 46 40/ 46 44/ 46 46/ 46 // yes 0/1022 512/1022 768/1022 896/1022 896/ 958 896/ 926 912/ 926 912/ 918 916/ 918 918/ 918 919/ 918 // NO 0/1022 512/1022 512/ 766 512/ 638 512/ 574 512/ 542 528/ 542 528/ 534 532/ 534 532/ 532 // yes found 5/ 10