1. 程式人生 > >Java(二分查詢演算法實現,分別使用遞迴和非遞迴方式)

Java(二分查詢演算法實現,分別使用遞迴和非遞迴方式)

public class BinarySearch {
	
	private int[] array;
	private int index;
	private int min;
	private int max;
	
	public BinarySearch(int[] array) {
		this.array = array;
		min = 0;
		max = this.array.length - 1;
	}
	/**
	 * 返回array中key下標,返回-1代表沒找到,使用遞迴方式
	 * @param key
	 * @return
	 */
	public int search(int key){
		index = (min + max) / 2;
		if(array[index] == key)
			return index;
		else if(min > max)
			return -1;
		else{
			if(array[index] > key)
				max = index - 1;
			else
				min = index + 1;
		}
		return search(key);
	}
	/**
	 * 返回array中key下標,返回-1代表沒找到,使用非遞迴方式
	 * @param key
	 * @return
	 */
	public int search2(int key){
		while(true){
			index = (min + max) / 2;
			if(array[index] == key)
				return index;
			else if(min > max)
				return -1;
			else{
				if(array[index] > key)
					max = index - 1;
				else
					min = index + 1;
			}
		}
	}
}

相關推薦

Java二分查詢演算法實現分別使用方式

public class BinarySearch { private int[] array; private int index; private int min; private int max; public BinarySearch(int[]

JAVA實驗二:編碼實現一個類對輸入陣列的數從小到大排序同時使用二分查詢某一個數

編碼實現一個類 (1)提供一個靜態方法,可以將輸入的一個int[]陣列按照從小到大的順序排列; (2)提供靜態方法,對排好序的陣列使用折半(二分)查詢(使用遞迴和非遞迴兩種形式分別實現)查詢某一個整數。 答案 import java.util.*; public class

javaleetcode852 山脈陣列的封頂索引二分查詢法找出陣列中最大值的下標Peak Index in a Mountain Array

題目描述: 我們把符合下列屬性的陣列 A 稱作山脈: A.length >= 3 存在 0 < i < A.length - 1 使得A[0] < A[1] < ... A[i-1] < A

優化的直接插入排序二分查詢插入排序希爾排序

   本博文向大家介紹了插入排序的三種實現:直接插入排序,二分查詢插入排序,希爾排序。詳細分析的其實現過程、時間複雜度和空間複雜度、穩定性以及優化改進策略。最後簡單的做了下效能測試。 直接插入排序 (一)概念及實現 直接插入排序的原理:先將原序列分為有序區和無序區,然後再經過比較和後移操作將無序

二分查詢演算法實現

#include<iostream> using namespace std; /* 本段程式,實現的是非遞迴的實現二分查詢演算法; 易錯點是low和high的重新定位,以及*array是引用關係; */ int BinarySearch(int *array, int Arra

二分查詢實現c語言實現

#include<stdio.h>++ int seeqSearch(int a[],int n,int k){     int i=n-1;     for(;i>=0;i--){//遍歷陣列         if(a[i]==k){//找到對應的陣列

二分查詢 java實現

public static int rank(int []a , int x, int lo, int hi) { if(hi<lo) return -1; if(a[lo+(hi-lo)/2]>x) return rank(a,x,lo,lo+(hi-lo)/2-1);

二分查詢實現

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

資料結構Java版的查詢演算法實現

import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.Set; /** * 查詢的基本演算法: *

演算法--查詢演算法順序查詢二分查詢方式

我們拋開二分查詢演算法,如果有這樣的一個需求,需要在一些數字中找出有沒有某個數字,我們應該怎麼做?          1 首先我們會想到用什麼資料結構存放這些數? 資料結構就是計算機儲存組織、

二叉樹--建樹前序中序後序--實現

reorder 前序 非遞歸後序遍歷 truct new tac preorder recursive while #include<iostream> #include<string.h> #include<stac

一列數字的規則如下;112358132134........ 求第30位數字是多少兩種方法演算法實現

斐波納契數列(Fibonacci Sequence),又稱黃金分割數列。在數學上,斐波納契數列以如下被以遞迴的方法定義:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)在現代物理、準晶體結構、化學等領域,斐波納契數列都有直接的應用,現在我從演算法的角度,利用遞迴和非

No.19程式碼練習:斐波那契數列某數k次冪模擬實現strlen(),階乘 逆置字串

學習不易,需要堅持。 遞迴 程式呼叫自身的程式設計技巧稱為遞迴( recursion)。遞迴做為一種演算法在程式設計語言中廣泛應用。 一個過程或函式在其定義或說明中有直接或間接呼叫自身的一種方法,它通常把一個大型複雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞迴策略只需

樹的遍歷--樹的廣度遍歷層次遍歷深度遍歷前序遍歷中序遍歷後序遍歷的實現

一 由於本人的碼雲太多太亂了,於是決定一個一個的整合到一個springboot專案裡面。 附上自己的github專案地址 https://github.com/247292980/spring-boot 附上彙總博文地址 https://www.cnblogs.com/ydymz/p/9391653.h

Java資料結構:二叉樹的前序中序後序遍歷

嚶嚶嚶,兩個月沒寫部落格了,由於有點忙,今天開始日更部落格。 今天總結一下學習樹的先根,中根,後根。每種兩種方法,遞迴和非遞迴。 先根: 遞迴: 思路:先根遍歷,即第一次遇到的結點就開始列印。先一直遍歷左子樹,直到未空,然後右子樹,直到為空。遞迴下去。 過程:先將1進入方法

二叉樹中序遍歷演算法及C語言實現

二叉樹中序遍歷的實現思想是: 訪問當前節點的左子樹; 訪問根節點; 訪問當前節點的右子樹; 圖 1 二叉樹   以圖  1 為例,採用中序遍歷的思想遍歷該二叉樹的過程為: 訪問該二叉樹的根節點,找到 1; 遍歷節點 1 的左子樹,找到節點 2; 遍歷節點 2 的左子樹,找到節點 4;

漢諾塔的改編題用棧求解分別

限制不能從最左側的塔直接移動到最右側,也不能從最右側直接移動到最左側,而是必須經過中間,求當塔有N層的時候,列印最優移動過程和最優移動總步數 例如:當塔為兩層時,最上層的塔記為1,最下層的塔記為2,則

N個臺階一次可以走一步或者兩步求走這n個臺階有多少種方法實現

1、遞迴實現 <pre name="code" class="cpp">///遞迴方法 int Fibonacci(unsigned int N) { if(N<=2)

二叉樹的建樹、遍歷先序、中序、後序、層次--Java實現

什麼是樹?什麼是二叉樹? 樹:除了根節點之外的所有節點都有且只有一個父節點,根節點沒有父節點;除了葉結點以外的所有節點,都有一個或多個子節點,葉結點沒有子節點。 二叉樹:是樹的一種特殊結構,在二叉樹中,每個節點最多隻能有兩個子

二叉樹的深度---java實現

遞迴實現 為了求樹的深度,可以先求其左子樹的深度和右子樹的深度,可以用遞迴實現,遞迴的出口就是節點為空。返回值為0; 非遞迴實現 利用層次遍歷的演算法,設定變數level記錄當前節點所在的層數,設定變數last指向當前層的最後一個節點,當處理完當前層的最後一個節點,讓lev