靜態查找表是指表結構不是在查詢過程中動態生成的,它可分為 順序查找(無序)、二分查找(有序)、分塊查找(索引順序查找)。
public static int seqSearch(int[] array, int key){ for(int i = 0; i < array.length; i++){ if(array[i] == key) return i; } return -1;}2.二分查找
時間復雜度(O(log2n))//非遞歸實現public static int binSearch(int[] array, int key){ int low = 0; int high = array.length - 1; int mid = 0; while(low <= high){ mid = (low + high)/2; if(key == array[mid]) return mid; else if(key > array[mid]) low = mid + 1; else high = mid - 1; } return -1;}//遞歸實現public static int binarySearch(int key, int[] array, int low, int high){ if(low > high) return -1; if(low <= high){ int mid = (low >>> 1) + (high >>> 1); if(key == array[mid]) return mid; else if(key > array[mid]) low = mid + 1; else high = mid - 1; } return binarySearch(key, array, low, high);}3.分塊查找
時間復雜度介于順序查找和二分查找之間分塊查找又稱索引順序查找,它是順序查找的一種改進方法,性能優于順序查找。
方法描述:
將n個數據元素“按塊有序”劃分為m塊(一般塊的長度均勻,最后一塊可以不滿)(m<=n),每一塊中的節點不必有序,但塊與塊之間必須“按塊有序”;即第一塊中的關鍵字必須小于(或者大于)第二塊中的關鍵字,第二塊中的關鍵字必須小于(或者大于)第三塊中的關鍵字,構造索引表,索引表按關鍵字有序排列。
如下圖所示:
圖示為一個索引順序表,其中包括三個塊,第一個塊的其實地址為0,快內最大關鍵字為25;第二個塊的其實地址為5,塊內最大關鍵字為58;第三個塊的起始地址為10,塊內最大關鍵字為88。
分塊查找基本步驟:
Step1、先選取各塊中最大關鍵字構成一個索引表;
Step2、查找分兩個部分:先對索引表進行二分查找或順序查找,以確定待查記錄在哪一塊中;然后,在已確定的塊中用順序法進行查找。
新聞熱點
疑難解答