Algorithm exercise-binary search hash table-JS implementation,-js
1. Create a binary hash table with the hash KEY value
2. Binary Search Based on Input hash values
The specific implementation is as follows:
function binarySearchTable(comp){this.comp = comp;this.kv = new Array();}binarySearchTable.prototype.add = function(k,v){if(this.kv.length == 0 || this.comp(this.kv[0].key,k) >= 0){this.kv.splice(0,0,{key:k,value:v});return this;}else if(this.comp(this.kv[this.kv.length - 1].key,k) <= 0){this.kv.push({key:k,value:v});return this;}else{for(var i = 1,j = i+1;j < this.kv.length; i ++, j++){if((this.comp(this.kv[i].key) < 0 || this.comp(this.kv[i].key) == 0) && (this.comp(this.kv[j].key) > 0 || this.comp(this.kv[j].key) == 0)){this.kv.splice(i,0,new {key:k,value:v});return this;}}}};binarySearchTable.prototype.getIndexByKey = function(k){var lo = 0;var hi = this.kv.length - 1;var mid = (lo + hi) / 2 | 0;var c = 0;while(lo < hi && (++c) < 10){if(this.comp(k,this.kv[mid].key) == 0){return mid;}else if(this.comp(k,this.kv[lo].key) == 0){return lo;}else if(this.comp(k,this.kv[hi].key) == 0){return hi;}else if(this.comp(this.kv[mid].key,k) < 0){lo = mid;mid = (hi+lo) / 2 | 0;}else {hi=mid;mid = (lo+hi)/2 | 0;}}return null;};binarySearchTable.prototype.removeByKey = function(k){var index = this.getIndexByKey(k);if(index != null){this.kv.splice(index,1);}}var comp = function(k1,k2){return k1 < k2 ? -1 : k1 == k2 ? 0 : 1;};var tbl = new binarySearchTable(comp);tbl.add("bec",1);tbl.add("acd",1);tbl.add("abc",1);tbl.add("dec",1);console.log(tbl.getIndexByKey("abc"));tbl.removeByKey("abc");console.log(tbl.getIndexByKey("abc"));