blog实现了命令行终端布置《算法》(第四版)运行学习环境:
首先确保自己PC的java运行环境正常!
一、到官网下载algs4.jar(本书的标准库)和algs4-data.zip(本书的数据支持文件);
官网下载网址:https://algs4.cs.princeton.edu/code/,找到上面的2个文件,下载到本地。
二、解压algs4-data.zip到自己的文件夹备用;解压algs4.jar,将里面的edu文件(即标准库包edu.princeton.cs.algs4.*)夹留着备用;
三、制作项目工程文件:
1⃣️新建立一个文件夹来存放BinarySearch.java,输入代码并保存(注意:书中代码老了,更新后的最新正确代码已附在文章末尾)
2⃣️将解压后的algs4.jar里面的edu文件夹,复制粘贴到该.java文件的目录下
3⃣️在刚才解压algs4-data.zip生成的文件夹里面找到TinyW.txt和TinyT.txt,复制到该.java文件夹下
项目目录入下所示:
四、打开终端(命令行工具),cd定位到该.java的目录,执行命令:
javac BinarySearch.java
java BinarySearch TinyW.txt < TinyT.txt
即可运行出结果。
附录:BinarySearch.java
import java.util.Arrays;
import edu.princeton.cs.algs4.In;
import edu.princeton.cs.algs4.StdIn;
import edu.princeton.cs.algs4.StdOut;
public class BinarySearch{
private BinarySearch() { }
public static int indexof(int[] a, int key){
//数组必须是有序的
int lo = 0;
int hi = a.length - 1;
while(lo <= hi){
int mid = lo + (hi - lo) / 2;
if(key < a[mid])
hi = mid - 1;
else if(key > a[mid])
lo = mid + 1;
else
return mid; //mid是数组中的坐标
}
return -1;
}
public static int rank(int key, int[] a){
return indexof(a, key);
}
public static void main(String[] args){
In in = new In(args[0]);
int[] allowlist = in.readAllInts();
Arrays.sort(allowlist);
while(!StdIn.isEmpty()){
//读取数字,如果不存在白名单上将其打印
int key = StdIn.readInt();
if(BinarySearch.indexof(allowlist, key) == -1)
StdOut.println(key);
}
}
}