靜態(tài)查找表是指表結(jié)構(gòu)不是在查詢過程中動態(tài)生成的,它可分為 順序查找(無序)、二分查找(有序)、分塊查找(索引順序查找)。
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.二分查找
時(shí)間復(fù)雜度(O(log2n))//非遞歸實(shí)現(xiàn)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;}//遞歸實(shí)現(xiàn)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.分塊查找
時(shí)間復(fù)雜度介于順序查找和二分查找之間分塊查找又稱索引順序查找,它是順序查找的一種改進(jìn)方法,性能優(yōu)于順序查找。
方法描述:
將n個(gè)數(shù)據(jù)元素“按塊有序”劃分為m塊(一般塊的長度均勻,最后一塊可以不滿)(m<=n),每一塊中的節(jié)點(diǎn)不必有序,但塊與塊之間必須“按塊有序”;即第一塊中的關(guān)鍵字必須小于(或者大于)第二塊中的關(guān)鍵字,第二塊中的關(guān)鍵字必須小于(或者大于)第三塊中的關(guān)鍵字,構(gòu)造索引表,索引表按關(guān)鍵字有序排列。
如下圖所示:
圖示為一個(gè)索引順序表,其中包括三個(gè)塊,第一個(gè)塊的其實(shí)地址為0,快內(nèi)最大關(guān)鍵字為25;第二個(gè)塊的其實(shí)地址為5,塊內(nèi)最大關(guān)鍵字為58;第三個(gè)塊的起始地址為10,塊內(nèi)最大關(guān)鍵字為88。
分塊查找基本步驟:
Step1、先選取各塊中最大關(guān)鍵字構(gòu)成一個(gè)索引表;
Step2、查找分兩個(gè)部分:先對索引表進(jìn)行二分查找或順序查找,以確定待查記錄在哪一塊中;然后,在已確定的塊中用順序法進(jìn)行查找。
|
新聞熱點(diǎn)
疑難解答