哎呀,大噶好,我是方圆 过完双节再不写博客儿,脑子就真的要废掉了
需要用到的官方扩展包(代码中In、Std等均需要此包):下载地址
二分查找法还是非常简单的,它的前提是数组有序,如果被查找的键等于a[mid],返回mid;否则将将算法的搜索范围减小一半,如果被查找的键小于a[mid]就继续在左半边查找,如果被查找的键大于a[mid]就继续在右半边查找。找到或者没有找到循环都会结束。
import edu.princeton.cs.algs4.In; import edu.princeton.cs.algs4.StdIn; import edu.princeton.cs.algs4.StdOut; import java.util.Arrays; /** * 二分查找 * 若存在我们要找的数字,返回它的位置; * 若不存在,则打印一条信息。 */ public class BinarySearch { public static int rank (int key, int[] a) { int lo = 0; int hi = a.length - 1; while (lo <= hi) { int mid = (lo + hi) / 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) { int [] whitelist = new In("C:\\Users\\37407\\Desktop\\demo1.txt").readAllInts(); Arrays.sort(whitelist); while(!StdIn.isEmpty()) { int key = StdIn.readInt(); int index = rank(key, whitelist); if(index != -1) StdOut.print(index); else System.out.println("宝贝儿,你要找的人不存在哟!"); } } } 测试结果对应《算法(第四版)》P6实例,博主进行了简单的修改 Tip: 不会吧?不会吧? 难倒我是最后一个知道用Java这样写科学计数法的数字吗?1.0e-15
递归写法也是非常的简单。
我们常用的转换代码包括d(Java整型的十进制数)、f(浮点型)和s(字符串)。
在%和转换代码之间插入可以插入值的宽度,默认情况下会在字符串的左边添加空格以达到需要的宽度(右对齐),如果想在右边加入空格我们需要使用负数的宽度(左对齐)。
在宽度之后我们还可以插入一个小数点以及一个数值来指定转换后的double值保留的小数位数或者是String类型的截取长度。
测试代码 ↓
public class PrintfDemo { public static void main(String[] args) { System.out.printf("测试转换代码,%d,%f,%s\n",1,1.0,"字符串类型转换代码"); System.out.println("---------"); System.out.printf("测试插入值的宽度,0d\n",33); System.out.printf("测试插入值的宽度,%-30d\n",33); System.out.println("---------"); System.out.printf("测试小数点位数,%.3f\n",Math.PI); System.out.printf("测试截取字符串的长度,%-33.5s","Hello World");//只会打印出Hello } } 测试结果《算法(第四版)》P1 - P32
我以为今天能看好多呢,还是高估自己了,哈哈哈,要继续加油儿!!!
