Java — 線性查詢和二分查詢法
阿新 • • 發佈:2019-02-14
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("所要查詢的數不存在!"); } } }
●求最大值和最小值
2,二分查詢法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); } }
概念:一種在有序陣列中查詢某一特定元素的搜尋演算法。請注意這種演算法是建立在有序陣列基礎上的。
演算法思想:搜素過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜素過程結束;如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢,而且跟開始一樣從中間元素開始比較。如果在某一步驟陣列為空,則代表找不到。
●查詢指定的數在陣列中出現的位置,找到返回下標,找不到返回-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+"個位置!"); } } }