1. 程式人生 > >Java — 線性查詢和二分查詢法

Java — 線性查詢和二分查詢法

1,線性查詢法:
工作原理:它又稱之為順序查詢。在一列給定的值中進行搜尋,

從一端開始逐一檢查每個元素,直到找到所需元素的過程

●查詢指定的數在陣列中出現的位置,找到返回下標,找不到返回-1


程式碼如下:

import java.util.Scanner;

public class LinearSearch {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] array={10,5,50,35,12,45,15,20};
		System.out.println("請輸入要查詢的數:");
		Scanner input =new Scanner(System.in);
		int number = input.nextInt();
		int index=-1;
		for(int i=1;i<array.length;i++)
		{
			if(number==array[i])
			{
				index=i+1;
				break;
			}
		}
		if(index!=-1)
		{
			System.out.println("查詢的數在陣列的"+index+"的位置!");
		}
		else
		{
			System.out.println("所要查詢的數不存在!");
		}

	}

}

●求最大值和最小值

public class MaxMinNumber {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] array={10,5,50,35,12,45,15,20};
		int max=array[0];
		int min=array[0];
		for(int i=1;i<array.length;i++)
		{
			if(max<array[i])
			{
				max=array[i];
			}
			if(min>array[i])
			{
				min=array[i];
			}
		}
		System.out.println("最大值為:"+max);
		System.out.println("最小值為:"+min);

	}

}
2,二分查詢法


概念:一種在有序陣列中查詢某一特定元素的搜尋演算法。請注意這種演算法是建立在有序陣列基礎上的。

演算法思想:搜素過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜素過程結束;如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢,而且跟開始一樣從中間元素開始比較。如果在某一步驟陣列為空,則代表找不到。

●查詢指定的數在陣列中出現的位置,找到返回下標,找不到返回-1

程式碼如下:

import java.util.Scanner;

public class BinarySearch {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] array={1,3,5,9,12,45,50,55,90};
		System.out.println("請輸入需要查詢的數:");
		Scanner input=new Scanner(System.in);
		int number =input.nextInt();
		int index=-1;					//查詢輸入的數在陣列中的位置,如果沒有找到等於-1
		int start=0;					//起始下標
		int end=array.length-1; 		//終止下標
		int middle;						//中間下標
		while(start<=end)
		{
			//中間下標所對應的元素位置
			middle=(start+end)/2;
			if(number==array[middle])
			{
				index=middle+1;
				break;
			}
			//如果要查詢的數大於中間的數,去掉左邊的數
			if(number>array[middle])
			{
				start=middle+1;
			}
			//如果要查詢的數小於中間的數,去掉右邊的數
			if(number<array[middle])
			{
				end=middle-1;
			}
		}
		//輸出執行結果
		if(index==-1)
		{
			System.out.println("查詢的數不存在!");
		}
		else
		{
			System.out.println("查詢的數在陣列第"+index+"個位置!");
		}
	}

}