索引查詢是在索引表和主表(即線性表的索引儲存結構)上進行的查詢。
索引查詢的過程是: 1)
首先根據給定的索引值k1,在索引表上查詢出索引值等於ki的索引項,以確定對應予表在主表中的開始位置和長度, 2)
然後再根據給定的關鍵字k2,茬對應的子表中查詢出關鍵字等於k2的元素(結點)。對索引表或子表進行查詢時,若表是順序儲存的有序表,則既可進行順序查詢,也可進行二分查詢,否則只能進行順序查詢。
一提到「索引」,估計大家第一反應就是「資料庫索引」,對的,其實主鍵建立「索引」,就是方便我們在海量資料中查詢。
實現索引查詢時常使用的三個術語: 1)
主表:這個很簡單,要查詢的物件。 2)
索引項:一般我們會用函式將乙個主表劃分成幾個子表,每個子表建立乙個索引,這個索引叫做索引項。 3)
索引表:索引項的集合也就是索引表。
一般「索引項」包含三種內容:index,start,length
第一:index,也就是索引指向主表的關鍵字。
第二:start,也就是index在主表中的位置。
第三:length, 也就是子表的區間長度。
**實現:
public class indexsearch ;
// 索引表
static indexitem indexitem = ;
// 查詢資料
public static int indexsearch(int key)
} // 如果item為null,則說明在索引中查詢失敗
if (item == null)
return -1;
for (int i = item.start; i < item.start + item.length; i++)
} return -1;
} // / 插入資料
public static int insert(int key)
} if (item == null)
return -1;
// 更新主表
students[item.start + item.length] = key;
// 更新索引表
indexitem[i].length++;
return 1;
} public static void main(string args) }}
// 索引項實體
class indexitem
public indexitem(int index, int start, int length)
}執行結果:
原資料為:[101, 102, 103, 104, 105, 0, 0, 0, 0, 0, 201, 202, 203, 204, 0, 0, 0, 0, 0, 0, 301, 302, 303, 0, 0, 0, 0, 0, 0, 0]
插入後資料:[101, 102, 103, 104, 105, 0, 0, 0, 0, 0, 201, 202, 203, 204, 205, 0, 0, 0, 0, 0, 301, 302, 303, 308, 0, 0, 0, 0, 0, 0]
資料元素:205在陣列中的位置為 14位
索引順序表查詢演算法(分塊查詢演算法)
有時候,可能會遇到這樣的表 整個表中的元素未必有序,但若劃分為若干塊後,每一塊中的所有元素均小於 或大於 其後面塊中的所有元素。我們稱這種為分塊有序。首先,我們需要先建立乙個索引表,索引表中為每一塊都設定 索引項,每乙個索引項都包含兩個內容 在前面建立的索引表的基礎上,我們查詢乙個關鍵字需要兩個步驟...
基礎演算法 查詢 線性索引查詢(I)
前面介紹的幾種查詢的演算法都是基於資料有序的基礎上進行的。但是在實際的應用中,很多資料集可能有驚人的資料量,面對這些海量的資料,要保證記錄全部按照當中的某個關鍵字有序,其時間代價是非常昂貴的,所以這種資料通常都是按先後順序儲存的。那麼如何能夠快速的查詢到需要的資料呢?辦法就是 索引。索引就是把乙個關...
查詢演算法之折半查詢
binary search 折半查詢又稱二分查詢,要求資料序列呈線性結構,即先排序,在查詢。可以明顯的提高查詢速度,其流程如下 預設陣列為a 需查詢的值為x 首先設定3個變數low mid high,分別儲存陣列元素開始 中間和末尾元素的序號。接著進行以下判斷。1 如果陣列中序號為mid的值與需查詢...