關於數組查找特定元素的幾種常用算法簡介


1.順序查找:

順序查找也稱為線形查找,從數據結構線形表的一端開始,順序掃描,依次將掃描到的結點關鍵字與給定值k相比較,若相等則表示查找成功;若掃描結束仍沒有找到關鍵字等於k的結點,表示查找失敗。 、

代碼實現如下:

/**
*
* @param a-需要被查找的數組
* @param s-需要查找的元素
* @return int -返回查找到的索引值,-1表示沒查到
*/
public static int seek(int[] a , int s){
for(int i = 0; i < a.length;i++){
if(a[i]==s){
return i;
}
}
return -1;
}

2.二分查找:

二分查找要求線形表中的結點按關鍵字值升序或降序排列,用給定值k先與中間結點的關鍵字比較,中間結點把線形表分成兩個子表,若相等則查找成功;若不相等,再根據k與該中間結點關鍵字的比較結果確定下一步查找哪個子表,這樣遞歸進行,直到查找到或查找結束發現表中沒有這樣的結點。

代碼實現如下:


/**
*
* @param a 需要被查找的數組
* @param front 數組的第一個索引
* @param end 數組的最后一個索引
* @param seekFalue 需要查找的元素
* @return int 返回查到的元素索引,-1表示
*/
public static int seek(int[] a, int front, int end, int seekFalue) {
if (front <= end) {
int mid = (front + end) / 2;
if (a[mid] == seekFalue) {
return mid;
} else if (a[mid] > seekFalue) {
return seek(a, front, mid - 1, seekFalue);
} else if (a[mid] < seekFalue) {
return seek(a, mid + 1, end, seekFalue);
}
}
return -1;
}

3.分塊查找:

分塊查找也稱為索引查找,把線形分成若干塊,在每一塊中的數據元素的存儲順序是任意的,但要求塊與塊之間須按關鍵字值的大小有序排列,還要建立一個按關鍵字值遞增順序排列的索引表,索引表中的一項對應線形表中的一塊,索引項包括兩個內容:① 鍵域存放相應塊的最大關鍵字;② 鏈域存放指向本塊第一個結點的指針。分塊查找分兩步進行,先確定待查找的結點屬於哪一塊,然后在塊內查找結點。

代碼實現如下:

4.哈希表查找:

哈希表查找是通過對記錄的關鍵字值進行運算,直接求出結點的地址,是關鍵字到地址的直接轉換方法,不用反復比較。假設f包含n個結點,Ri為其中某個結點(1≤i≤n),keyi是其關鍵字值,在keyi與Ri的地址之間建立某種函數關系,可以通過這個函數把關鍵字值轉換成相應結點的地址,有:addr(Ri)=H(keyi),addr(Ri)為哈希函數。 
代碼實現如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM