您的位置:首页 > 编程语言 > Go语言

算法Sedgewick第四版-第1章基础-1.4 Analysis of Algorithms-006BitonicMax

2016-04-20 18:37 459 查看
package algorithms.analysis14;

import algorithms.util.StdOut;
import algorithms.util.StdRandom;

/******************************************************************************
*  Compilation:  javac BitonicMax.java
*  Execution:    java BitonicMax N
*  Dependencies: StdOut.java
*
*  Find the maximum in a bitonic array (strictly increasing, then strictly
*  decreasing) of size N in log N time.
*
*  % java BitonicMax N
*
******************************************************************************/

public class BitonicMax {

// create a bitonic array of size N
public static int[] bitonic(int N) {
int mid = StdRandom.uniform(N);
int[] a = new int
;
for (int i = 1; i < mid; i++) {
a[i] = a[i-1] + 1 + StdRandom.uniform(9);
}

if (mid > 0) a[mid] = a[mid-1] + StdRandom.uniform(10) - 5;

for (int i = mid + 1; i < N; i++) {
a[i] = a[i-1] - 1 - StdRandom.uniform(9);
}

for (int i = 0; i < N; i++) {
StdOut.println(a[i]);
}
return a;
}

// find the index of the maximum in a bitonic subarray a[lo..hi]
public static int max(int[] a, int lo, int hi) {
if (hi == lo) return hi;
int mid = lo + (hi - lo) / 2;
if (a[mid] < a[mid + 1]) return max(a, mid+1, hi);
if (a[mid] > a[mid + 1]) return max(a, lo, mid);
else return mid;
}

public static void main(String[] args) {

int N = Integer.parseInt(args[0]);
int[] a = bitonic(N);
StdOut.println("max = " + a[max(a, 0, N-1)]);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: