// 将数组array通过除数取余法分散到hash数组中 void BuildHash(int *hash, int *array, int n) { bool flag[HASH_LENGTH] = {false}; int index; for(int i = 0; i < n; i++) { index = array[i] % HASH_LENGTH; if(!flag[index]) { hash[index] = array[i]; flag[index] = true; } else { while(flag[++index%HASH_LENGTH]); hash[index] = array[i]; flag[index] = true; } } } // 从hash散列中寻找key // hash地址冲突采用开放地址探测法解决 int SearchHash(int *hash, int key) { int index = key % HASH_LENGTH; if(key == hash[index]) { return index; } else { int temp = index; while((key != hash[++index%HASH_LENGTH]) && (index%HASH_LENGTH != temp)); if(key == hash[index]) { return index; } } return -1; } int BinarySearch(int *array, int n, int key) { int hash[HASH_LENGTH]; init(hash, HASH_LENGTH); BuildHash(hash, array, n); return SearchHash(hash, key); }