码迷,mamicode.com
首页 > 编程语言 > 详细

给字符排序-基类排序二分查找-JavaScript

时间:2020-07-01 20:32:24      阅读:61      评论:0      收藏:0      [点我收藏+]

标签:sort   大小   ||   去重   only   script   dea   ++   cti   

//比较字符基类大小 相同返回0,str1>str2 返回1,str1<str2 返回-1,
function str_compare(str1,str2){
    let index=0;
    let dis=0;
    while (dis===0&&index<str1.length){
        if(str1.charCodeAt(index)>str2.charCodeAt(index)){
            dis=1
        }else if(str1.charCodeAt(index)<str2.charCodeAt(index)){
            dis=-1
        }else{
            index++;
            if(index>str2.length){
                dis=1;
            }
        }
    }
    if(dis===0&&index<str2.length){
        dis=-1
    }
    return dis;
}
//用二分法查找最近的字符位置
function str_find(str,hasSortArr) {
    let l=0,r=hasSortArr.length;
    let index=-1;
    while(r-l>0){
        const m=(l+r)>>1;
        //比较下坐标大小
        const order=str_compare(str,hasSortArr[m])
        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]
}
//字符排序,isOnly 是否去重
function str_sort(arr,isOnly) {
    const sa=[]
    for(let i=0;i<arr.length;i++){
        const [n,index]=str_find(arr[i],sa);
        if(!isOnly||index===-1){
            sa.splice(n,0,arr[i])
        }
    }
    return sa;
}
//字符排序
const arr=[‘123‘,‘是‘,‘15101175664‘,‘15101175662‘];
console.log(str_sort(arr,true))

 

给字符排序-基类排序二分查找-JavaScript

标签:sort   大小   ||   去重   only   script   dea   ++   cti   

原文地址:https://www.cnblogs.com/caoke/p/13220958.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!