分塊查找算法思路、示例和實現

分塊查找

索引表 | 22 | 44 | 74 |
數組 | 22 12 13 9 8 | 33 42 44 38 24 | 48 60 58 74 47 |

算法步驟

  1. 通過索引表線性查找確定在數組的哪一“塊”
  2. 通過數組裏所在“塊”的線性查找確定是否存在、在哪個位置

算法代碼

Keytype  k; // 關鍵字
int blocks; // 整個索引表的長度
int last; // 整個數組的長度 last = blocks * L
index ix LIST  F ;
int L ;
Int   index_search(  k,  last, blocks, ix,  F,L  )
{
	int  i, j ; // i是索引表座標,j是數組每塊的座標
	i = 0; // 第一位索引表
	while (( ix[i] < k) 	&&   (i < blocks) )  i++  ;
		// 當前查找值小於目標值 且  查找的座標在索引表範圍內
	if ( i < blocks ) { // i在範圍內則說明上一行代碼有查找到,不在範圍內則沒查找到
		j = i*L; // 每塊長度爲L,要在第i塊內查找,數組內的座標j爲i×L
		while (( k != F[j].key ) && (j <= (i+1)*L-1 ) && (j < last))
			// 當前查找值目標值不同 且  座標j在範圍內   且 j在整個數組範圍內(防止查找最後一“塊”時越界)
			j = j + 1; // 查找塊內的下一個查找元素
		if ( k == F[ j ].key )  return j ; // 若查找到則返回下標
		/* 	執行這條語句,有可能是:
			1. 上一個while的第一個條件不滿足(即查找成功!)
			2. 第二/三個條件不滿足(即越界≈無目標值,查找失敗
		*/
	}
	return1 ; // 查找失敗
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章