二分法简单示例
Java二分法簡單示例
首先進行二分法必須得是有序的數(shù)組,如果是無序數(shù)組,那么先進行排序,再用二分法解決。
package com.etime.test007;import java.util.Arrays;//例:結(jié)合二分查找法在數(shù)組{1,3,2,4,5,7,6}中取出數(shù)字3 public class Test01 {public static void main(String[] args) {// 必須先進行排序再進行二分法int[] array = { 1, 3, 2, 4, 5, 7, 6 };int len = array.length;int temp = 0;for (int i = 0; i < len - 1; i++) {for (int j = 0; j < len - i - 1; j++) {if (array[j] > array[j + 1]) {temp = array[j + 1];array[j + 1] = array[j];array[j] = temp;}}}System.out.println(Arrays.toString(array));// k為要取的值。int k = 3;// 定義能取到k的最大值為長度減一。int max = len - 1;// 定義最小值是0。int min = array[0];// 有序數(shù)組的中間值為最小值加上最大值除以二。int mid = (min + max) / 2;// while語句如果滿足要取的值不等于中間值,就執(zhí)行while語句。while (array[mid] != k) {// 如果滿足最小值小于等于最大值,繼續(xù)執(zhí)行。if (min <= max) {// 因為前面冒泡排序是從小到大的排序。要取的值小于中間值mid,所以取值在中間值的左邊位置,但不能等于中間值,所以mid要減一。if (array[mid] > k) {max = mid - 1;// 同理前面冒泡排序是從小到大的排序。要取的值大于中間值mid,所以取值在中間值的右邊位置,也不能等于中間值,所以mid要加一。} else if (array[mid] < k) {min = mid + 1;}// 中間值mid = (min + max) / 2;} else {// 當不滿足最小值小于最大值時直接輸出:數(shù)據(jù)錯誤!System.out.println("數(shù)據(jù)錯誤!");}}// 輸出結(jié)果System.out.println("取值為:" + (mid+1));} }效果圖如下
以上為示例,還請多多指教。
總結(jié)
- 上一篇: Protel99se电路设计速成-熊健-
- 下一篇: 量化投资--技术篇(4) 投资组合策略