標籤:java 二分尋找
二分尋找:
這個演算法是比較簡單的,容易理解的。這個演算法是對有序的數組進行尋找,所以想要使用這個演算法那麼
首先先要對數組進行排序。
其實有三個指標,開始指標,末尾指標,中間指標,來開始。折半尋找。
步驟如下:
1、確定三個指標,start,end,middleIndex。
2、判斷start<=end,如果滿足,就執行這個方法,不滿足,就返回,找不到。
3、在2的前提下,我們對其折半尋找,middleIndex = start+end >> 1,取中間值。
4、判斷中間位置的值和目標值是否相等,如果相等就返回這個位置。
不相等,如果中間位置的值比目標值大,就在左半邊的數組來遞迴尋找這個目標值,
否則在右邊的數組尋找遞迴這個目標值。
5.傳回值。
package com.test4;/** * 二分尋找 * * @author sdc * */public class BinarySearch {// 尋找某個元素需要的次數static int count;public static void main(String[] args) {}/** * 二分尋找--遞迴的形式,二分尋找是對有序的數組尋找 * * @param sortArray * @param start * @param end * @param target * @return */public static int binarySearch(int[] sortArray, int start, int end, int target) {if (sortArray == null) {return -1;}int sortArrayLength = sortArray.length;if (sortArrayLength == 1) {return sortArray[0];}count++;// 真正開始了,尋找if (start <= end) {// 中間的位置int middleIndex = (start + end) >> 1;// 中間的值int middleData = sortArray[middleIndex];if (middleData == target) {return middleIndex;} else if (middleData < target) {return binarySearch(sortArray, middleIndex + 1, end, target);} else {return binarySearch(sortArray, start, middleIndex - 1, target);}} else { // 給的傳回值不對return -1;}}/** * 二分尋找-非遞迴的形式 * * @param sortArray * @param target * @return */public static int serarch(int[] sortArray, int target) {if (sortArray == null) {return -1;}// 起始位置int start = 0;// 結束位置int end = sortArray.length - 1;while (start <= end) { // 一直迴圈尋找// 中間位置int middleIndex = (start + end) >> 1;if(sortArray[middleIndex] == target) {return middleIndex;}else if(sortArray[middleIndex] > target) {end = middleIndex -1;}else {start = middleIndex +1;}}return -1;}}
結束:
本文出自 “10093778” 部落格,請務必保留此出處http://10103778.blog.51cto.com/10093778/1918333
java 二分尋找 - 折半尋找演算法