首页 > 编程语言 > 详细

文件内容排名算法,输入排名函数,返回排名后的文件名

时间:2020-07-04 14:38:34      阅读:55      评论:0      收藏:0      [点我收藏+]
const fs=require(‘fs‘);
//比较字符基类大小 相同返回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 find(str,hasSortArr,callback) {
    let l=0,r=hasSortArr.length;
    let index=-1;
    if(hasSortArr.length>0){
        const ri=callback(str,hasSortArr[r-1]);
        if(ri===1){
            return [r,-1]
        }else if(ri===0){
            return [r-1,r-1]
        }else{
            r=r-1;
        }
        const li=callback(str,hasSortArr[0]);
        if(li===-1){
            return [0,-1]
        }else if(li===0){
            return [0,0]
        }else{
            l=l+1;
        }
        while(r-l>0){
            const m=(l+r)>>1;
            //比较下坐标大小
            const order=callback(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]
}
//输入排名函数,返回-1,0,1
function sort(list,compare){
    const hasSortArr=[]
    for(let i=0;i<list.length;i++){
        const [n,index]=find(list[i],hasSortArr,compare)
        //增加、插入
        hasSortArr.splice(n,0,list[i])
    }
    return hasSortArr;
}
/* demo
文件内容排名算法,输入排名函数,返回排名后的文件名
 */
const dir=__dirname+‘/data/‘;
const list=fs.readdirSync(dir)
const hasSortArr=sort(list,function (name1,name2) {
    const cont1=fs.readFileSync(dir+name1).toString()
    const cont2=fs.readFileSync(dir+name2).toString()
    return str_compare(cont1,cont2)
})
console.log(hasSortArr)

 

文件内容排名算法,输入排名函数,返回排名后的文件名

原文:https://www.cnblogs.com/caoke/p/13234791.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!