UNPKG

rbinarysearch

Version:
80 lines (75 loc) 1.93 kB
class rvector{ constructor(){ this.elemens = []; } getvec(){ return this.elemens; } addElems(name){ if(name.constructor == Array){ if(name.every(function(i){ return typeof i === "number" })){ for(var i = 0; i < name.length; ++i){ this.elemens.push(name[i]);} this.elemens.sort(function(a, b){return a - b;}); } if(name.every(function(i){ return typeof i === "string" })){ for(var i = 0; i < name.length; ++i){ this.elemens.push(name[i]);} this.elemens.sort(); } } else{ this.elemens.push(name); if(typeof(name) == "string") this.elemens.sort(); else this.elemens.sort(function(a, b){return a - b;}); } } deleteElems(name){ if(name.constructor == Array){ for(var i = 0; i < name.length; ++i){ var index = this.elemens.indexOf(name[i]); while(index >= 0){ this.elemens.splice(index,1); index = this.elemens.indexOf(name[i]); } } } else{ var index = this.elemens.indexOf(name); if(index < 0) return -1; while(index >= 0){ this.elemens.splice(index,1); index = this.elemens.indexOf(name); } } return 1; } position_i(x,esq,dre){ if(esq > dre) return -1; else{ var m = (esq+dre)/2; m = parseInt(m, 10); if(this.elemens[m] == x) return m; else if(this.elemens[m] > x) return this.position_i(x,esq,m-1); else return this.position_i(x,m+1,dre); } } position_s(x,esq,dre){ if(esq > dre) return -1; else{ var m = (esq+dre)/2; m = parseInt(m, 10); var c = x.localeCompare(this.elemens[m]); if(c == 0) return m; else if(c == -1) return this.position_s(x,esq,m-1); else return this.position_s(x,m+1,dre); } } binarysearch(x){ if(typeof(x) == "string") return this.position_s(x,0,this.elemens.length); else return this.position_i(x,0,this.elemens.length); } printVec(){ var str = this.elemens.join(', '); console.log(str); } } module.exports = rvector;