rbinarysearch
Version:
Recursive Binary Search
80 lines (75 loc) • 1.93 kB
JavaScript
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;