算法之二分查找(java版实现加测试)
2017-07-10 14:45
453 查看
进阶版入口
递归处理的核心算法(加入·deep是为理解算法):
递归形式的测试:
main:
非递归核心算法:
非递归二分查找的测试:
main:
递归处理的核心算法(加入·deep是为理解算法):
import edu.princeton.cs.algs4.*; public class Main{ public static int rank(int key,int[] a) { int deep = 0; return rank(key,a,0,a.length - 1,deep); } public static int rank(int key,int[] a,int lo,int hi,int deep) { if(lo > hi) return -1; int mid = lo + (hi - lo) / 2; if(a[mid] > key) { StdOut.printf("deep: %d lo: %d hi: %d\n",deep,lo,hi); ++deep; return rank(key,a,lo,mid - 1,deep); } else if(a[mid] < key) { StdOut.printf("deep: %d lo: %d hi: %d\n",deep,lo,hi); ++deep; return rank(key,a,mid + 1,hi,deep); } else { StdOut.printf("deep: %d lo: %d hi: %d\n",deep,lo,hi); return mid; } } public static void main(String[] args) { int M = 10; int[] a = new int[M]; for(int i = 0; i < M; ++i) a[i] = i; StdOut.printf("%d",rank(9,a)); } }
递归形式的测试:
public static void test(String mode,String file) { In in = new In(file); int[] a = in.readAllInts(); Arrays.sort(a); //"+"打印出不在白名单中的数 if(mode == "+") { while(!StdIn.isEmpty()) { int key = StdIn.readInt(); if(rank(key,a) == -1) { StdOut.printf("%d is not in whitelist\n", key); } } } //"-"打印出在白名单中的数 if(mode == "-") { while(!StdIn.isEmpty()) { int key = StdIn.readInt(); if(rank(key,a) != -1) StdOut.printf("%d is in whitelist\n",key); } } }
main:
public static void main(String[] args) { test("-","test.txt"); }
非递归核心算法:
public static int rank(int key,int[] a) { int lo = 0; int hi = a.length - 1; while(lo <= hi) { int mid = lo + (hi - lo) / 2; if(a[mid] > key) hi = mid - 1; else if(a[mid] < key) lo = mid + 1; else return mid; } return -1; }
非递归二分查找的测试:
public static void test(String mode,String file) { In in = new In(file); int[] a = in.readAllInts(); Arrays.sort(a); //"+"打印出不在白名单中的数 if(mode == "+") { while(!StdIn.isEmpty()) { int key = StdIn.readInt(); if(rank(key,a) == -1) { StdOut.printf("%d is not in whitelist\n", key); } } } //"-"打印出在白名单中的数 if(mode == "-") { while(!StdIn.isEmpty()) { int key = StdIn.readInt(); if(rank(key,a) != -1) StdOut.printf("%d is in whitelist\n",key); } } }
main:
public static void main(String[] args) { test("-","test.txt"); }
相关文章推荐
- 算法之二分查找(c++版实现+测试)
- 算法(第四版)学习笔记之二分查找的递归与非递归java实现
- 算法之二分查找(c语言版实现+测试)
- 算法Java实现 --- 三种静态查找方法
- SVM分类算法,libsvm的Java语言实现-根据语料和测试语料判断准确率的
- 查找(顺序、二分、斐波那契和插值)算法的实现和测试
- 算法:查找----二分查找(Java实现)
- 字符串查找匹配算法的一种Java实现
- 相似文档查找算法之 simHash 简介及其 java 实现 - leejun_2005的个人页面 - 开源中国社区
- Java数据结构 遍历 排序 查找 算法实现
- Java实现的快速查找算法示例
- 算法 -- Java实现二分(折半)查找(图解 + 代码实现)
- java语言实现常用算法(排序和查找)
- 一年前用java写的一个公交换乘算法测试,实现一次换乘
- 查找""排序""简单数学计算" "简单算法"[Java实现](数据结构和算法)(复习)(持续更新
- [算法]java实现 二分查找 斐波那契数列 静静思考
- java算法之二分查找
- Java-算法之二分查找
- 【算法数据结构Java实现】折半查找
- 数据算法之二叉树查找(BinaryTreeL Search)的Java实现