二分查找法、二分去重排序法,返回最接近的位置和实际位置

//二分查找法,返回最接近的位置和实际位置
function binary_find(id,hasSortArr){
    let l=0,r=hasSortArr.length;
    let index=-1;
    while(r-l>0){
        const m=(l+r)>>1;
        const mid=hasSortArr[m]
        //比较下坐标大小
        const order=id>mid?1:(id<mid?-1:0)

        if(order===1){
            l=Math.max(l+1,m)
        }else if(order===-1){
            r=Math.min(r-1,m)
        }else{
            l=r=m;
            index=m;
        }
    }
    return [(l+r)>>1,index]
}
//二分法去重排序
function binary_sort(str) {
    const sa=[]
    for(let i=0;i<str.length;i++){
        const [n,index]=binary_find(str[i],sa);
        if(index===-1){
            sa.splice(n,0,str[i])
        }
    }
    return sa;
}


let str='safsdfafd12你3123123';
console.log(binary_sort(str));
/*[
  '1', '2',  '3',
  'a', 'd',  'f',
  's', '你'
]*/

 

posted @ 2020-06-25 16:46  巅峰蜗牛  阅读(349)  评论(0编辑  收藏  举报