1. 程式人生 > >Java實現陣列二分查詢及遞迴二分查詢

Java實現陣列二分查詢及遞迴二分查詢

public void binarySearch(int value){
	int low = 0;
	int upper = nElements - 1;
	int currtIn = (low+upper)/2;
	while(true){
		if(array[currtIn] == value){
			System.out.println("find it :_"+currtIn+" "+array[currtIn]);
			return;
		}else if(array[currtIn] > value){//若當前值比關鍵字大,說明關鍵字在其前,upper要變為當前下標-1
			upper = currtIn-1;	
		}else{
			low = currtIn+1;
		}
		if(low>upper){
			System.out.println("can`t find it :"+value);
			return;
		}
		currtIn = (low+upper)/2;
	}
}

遞迴實現:
public void recBinarySearch(int value,int low,int upper){
        int current = (low+upper)/2;
        if(array[current] == value){
            System.out.println("find it:"+current+" value:"+array[current]);
            return;
        }else if(low > upper){
            System.out.println("can`t find it");
        }else{
            if(value > array[current]){
                recBinarySearch(value, current+1,upper);
            }else{
                recBinarySearch(value, low, current-1);
            }
        }
    }

相關推薦

Java實現陣列二分查詢二分查詢

public void binarySearch(int value){ int low = 0; int upper = nElements - 1; int currtIn = (low+u

java版資料結構與演算法—(二分查詢)

package com.zoujc.triangle; /** * 遞迴:二分查詢 */ class OrdArray { private int[] a; private int nElems; public OrdArray(int max){

Java實現陣列轉字串字串轉陣列的方法

字串轉陣列 使用Java split() 方法 split() 方法根據匹配給定的正則表示式來拆分字串。 注意: . 、 | 和 * 等轉義字元,必須得加 \\。多個分隔符,可以用 | 作為連字元。 ? 1 2 3

折半查詢折半查詢詳解(二分查詢二分查詢

演算法:當資料量很大適宜採用該方法。採用二分法查詢時,資料需是排好序的。(前提) 主要思想是:(設查詢的陣列區間為array[low, high]) (1)確定該區間的中間位置K (2)將查詢的值T與

Java實現樹結構資料的與非遍歷

樹結構的遞迴與非遞迴的遍歷 遞迴在很多情況下我們都會使用,比如著名的漢諾塔問題、二分查詢等,有時候我們遍歷一棵樹形資料結構的資料也會需要用到遞迴,但並不是絕對。原因是:以遞迴遍歷一棵樹型結構的資料為例,遞迴會不斷的呼叫當前方法,以深度遍歷方式沿著一條支路走到底,然後再回來執

java二分查詢實現

遞迴:方法可以呼叫自己 編寫遞迴程式碼時有一下三點:  遞迴總有一個最簡單的情況——方法的第一條語句總是一個包含return的條件語句。 遞迴呼叫總是去嘗試解決一個規模更小的子問題,這樣遞迴才能收斂到最簡單的情況。在下面的程式碼中,第四個引數和第三個引數的差值一直在縮小

利用java實現二分查詢

package interview; /** * 利用java實現非遞迴的二分查詢 * @author zhoupeng * */ public class BinaryChop { public static void main(String[] args) {

[整理]二分查詢搜尋演算法原理,迭代方法實現

折半查詢法也稱為二分查詢法,它充分利用了元素間的次序關係,採用分治策略,可在最壞的情況下用O(log n)完成搜尋任務。 【基本思想】 將n個元素分成個數大致相同的兩半,取a[n/2]與欲查詢的x作比較,如果x=a[n/2]則找到x,演算法終止。如果x<a[n/2],

Java 二分查詢實現

廢話不說,直接上程式碼package com.search; public class SearchOfMid { public static void main(String[] args) { int [] arr = {1,3,4,5,2,5,1,8,9,5}

# 二分查詢與非實現

二分查詢的遞迴與非遞迴實現 二分查詢也稱為折半查詢,首先,假設表中元素是按升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功;否則利用中間位置記錄將表分成前、後兩個子表,如果

二分查詢實現和迴圈實現

用遞迴的方法實現二分法查詢(二分法查詢的前提是資料有序) #include <stdio.h>#include <stdlib.h>// 二分查詢-資料有序int _binary_find(int arr[],int left,int right,int key){   if(lef

利用二分法結合查詢陣列中的元素的下標

注意:由於二分法只適用於有序陣列的元素查詢,對於無序陣列,我們必須先對其進行排序。 陣列可由Math.random()方法結合迴圈自動生成一個固定長度的int陣列,然後呼叫Arrays.sort()方法對其排序,然後得到我們想要的有序int陣列 第一種方法:不使用遞迴 import ja

Python實現素數篩法與二分查詢)

def prime(n): if n<=2: return [] result=[False,False]+[True]*(n-2) for i in range(len(result)): if result[

二分查詢/非方式C++實現

二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好;其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。時間複雜度為O(logN) 二分查詢

JAVA語言實現二叉樹的層次遍歷的非演算法演算法

/** 二叉樹節點 */ public class BTNode {   private char key;   private BTNode left, right;   public BTNode(char key) {     this(key, null, null

二分查詢實現)(可查詢重複元素)

# 二分查詢(遞迴實現)(可查詢重複元素)def HalfSearch(target,my_list,left,right): # 二分查詢是建立在有序列表之上的 if left >right: return mid = (left + right)//2 result

Java】 歸併排序的非實現 資料結構與演算法合集 資料結構與演算法合集

  歸併排序可以採用遞迴方法(見:歸併排序),但遞迴方法會消耗深度位O(longn)的棧空間,使用歸併排序時,應該儘量使用非遞迴方法。本文實現了java版的非遞迴歸併排序。 更多:資料結構與演算法合集 思路分析   遞迴排序的核心是merge(int[] arr, int start, int mid,

找數字(,二分查詢)

題目:在一從大到小排序的序列中用遞迴找一個數在不在這序列,在輸出yes,不在輸出no 這題用了二分查詢的遞迴實現 思路: 把陣列和變數都變成全域性變數方便遞迴函式修改 然後如果不可能就跳出迴圈 如果可能但現在沒找到就縮小範圍進入下一個遞迴過程 如果找到了就輸出 程式碼: #include

Java:File類、查詢檔案

1、File類-概述 1)java.io.File 這個類可以表示磁碟上的一個檔案/目錄,可以獲取檔案/目錄的一些屬性資訊: 檔案/目錄的名字 檔案的大小 檔案/目錄的最後

Java實現Fibonacci數列,尾實現Fibonacci數列,並獲取計算所需時間

遞迴法計算Fibonacci數列: 它可以遞迴地定義為: 第n個Fibonacci數列可遞迴地計算如下: int fibonacci(int n)    {        if (n <= 1) return 1;        return fibon