1. 程式人生 > 實用技巧 >順序查詢演算法加優化

順序查詢演算法加優化

網上看了一部分程式碼,很多寫的比較亂,程式碼也不全,現在整理了一下程式碼以便學習

順序查詢演算法比較簡單,在一個線性表中,按照從前往後或者從後往前的順序依次查詢,如果查詢到關鍵字和給定值相等,則返回給定值的位置,查詢成功;如果查詢值最後一個元素仍未找到,則查詢失敗。

package find;

import java.util.Scanner;

public class shunxu {
    public static void main(String[] args) {
        int[] a={1,2,3,5,7,9,10,11,12,11};
        int n=a.length;
        System.
out.println("請輸入想要查詢的數值:"); Scanner sc=new Scanner(System.in); int key=sc.nextInt(); int s=Sequential_Search(a,n,key); if(s==0){ System.out.println("沒有這個資料"); }else{ System.out.println("查到資料為第"+s+"個數"); } } /*順序查詢,a為陣列,n為要查詢的陣列長度,key為要查詢的關鍵字
*/ private static int Sequential_Search(int a[],int n,int key) { int i; for(i=0;i<n;i++) { if(a[i]==key){ return i+1; } } return 0; } }

有一種改進的演算法,引入了哨兵的思想,所謂哨兵就是將關鍵字用一個數組位置去儲存,保證在迴圈的過程中不必判斷陣列是否越界,因為執行到最後一個元素時,一定會跳出迴圈。在一定程度上優化了普通查詢演算法。

package find;

import java.util.Scanner;

public class shunxu2 {
    public static void main(String[] args) {
        int[] a={1,2,3,5,7,9,10,11,12,11};
        int n=a.length;
        System.out.println("請輸入想要查詢的數值:");
        Scanner sc=new Scanner(System.in);
        int key=sc.nextInt();
        int s=Sequential_Search(a,n,key);
        if(s==0){
            System.out.println("沒有這個資料");
        }else{
            System.out.println("查到資料為第"+s+"個數");
        }
    }
    /*有哨兵順序查詢*/
    private static int Sequential_Search(int a[],int n,int key)
    {
        int i;
        a[0]=key;//設定a[0]為關鍵字值,稱為哨兵
        i=n-1;       //迴圈從陣列尾部開始
        while (a[i]!=key){
            i--;
        }
        return i+1;
    }
}