1.二分查找的迭代实现
#pragma warning(disable:4996)
#include <stdio.h>
/*二分查找的递归实现*/
int rank(int key, int* a, int lo, int hi)
{
if (lo > hi) return -1;
int mid = lo + (hi - lo) / 2;
if (key < a[mid]) return rank(key, a, lo, mid - 1);
else if (key > a[mid]) return rank(key, a, mid + 1, hi);
else return mid;
}
int main(void) {
int a[12] = { 1,3,5,6,7,8,9,10,15,17,18,19 };
int key = 10;
int b = rank(10, a, 0, 12);
printf("%d", b);
return 0;
}
java版本(对比不同,C版本的我去掉了第一个函数,java是调用重载函数):
package oj;
public class aj {
public static int rank(int key, int[] a) {
return rank(key, a, 0, a.length - 1);
}
public static int rank(int key, int[] a, int lo, int hi) {
if (lo > hi)
return -1;
int mid = lo + (hi - lo) / 2;
if (key < a[mid])
return rank(key, a, lo, mid - 1);
else if (key > a[mid])
return rank(key, a, mid + 1, hi);
else
return mid;
}
public static void main(String[] args) {
int[] a = { 1, 3, 5, 6, 7, 8, 9, 10, 15, 17, 18, 19 };
int key = 10;
int b = rank(10, a);
System.out.println(b);
}
}
2.Java eclipse命令行输入参数的方法
空白处进行右击>Run as>Run configurations,选择“Arguments”部分,输入一组参数,然后Run。
补充:这种情况下通过命令行得到的参数都是字符串类型的,要进行四则运算,必须先转换成数值类型。使用Integer类中的类方法parseInt(),可以将小括号里的字符串转化为整型。Flaot.parseFloat()与Double.parseDouble()方法分别把小括号里的字符串转化为单精度实数与双精度实数。
3.eclipse【算法4】环境配置
1.点击new →Java project→右击项目->properties->java Build Path ->Libraries,鼠标点到ClassPath->点开Add External JARs然后找到你存放algs4.jar、stdlib.jar的位置,导入即可。
右键项目new一个class命名为Test
下边是测试程序代码
package suanfates;
import edu.princeton.cs.algs4.StdDraw;
public class Test {
public static void main(String[] args) {
int N = 100;
StdDraw.setXscale(0, N); //StdDraw就是algs4中的类
StdDraw.setYscale(0, N*N);
StdDraw.setPenRadius(.01);
for(int i = 1; i <= N; ++i) {
StdDraw.point(i, i);
StdDraw.point(i, i*i);
StdDraw.point(i, i*Math.log(i));
}
}
}
4.import edu.princeton.cs.algs4.StdOut;
5.改变console控制台输出字体大小 window→preferences→搜索【Colors and Fonts】→【Debug】→edit
改变代码字体大小 window→preferences→搜索【Colors and Fonts】→【Java】→edit
6.sysout然后按alt+/可以直接打出System.out.println
7.讲一个正整数n用二进制表示并转化为一个string类型的值s,Java有内置方法Integer.toBinaryString(n)专门完成这个任务,以下是另一种方法:
int n;
String s = "";
for (n = 50; n > 0; n /= 2)
s = (n % 2) + s;
System.out.println(s);
import java.util.Arrays;
import edu.princeton.cs.algs4.StdOut;
import edu.princeton.cs.algs4.In;
import edu.princeton.cs.algs4.StdDraw;
import edu.princeton.cs.algs4.StdIn;
8.使用同一个包的另一个类 import 包名.类名
Exception in thread "main" java.lang.IllegalArgumentException: Could not open %
at edu.princeton.cs.algs4.In.<init>(In.java:196)
at edu.princeton.cs.algs4.In.readInts(In.java:597)
at suanfates.Whitelist.main(Whitelist.java:11)
Caused by: java.net.MalformedURLException: no protocol: %
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at edu.princeton.cs.algs4.In.<init>(In.java:182)
... 2 more
网友评论