前端,JS排序,正序逆序,基数排序

1 篇文章 0 订阅
排序算法很多,这里选用基数排序,不同的是考虑到之后扩展特殊字符,中文等在此多定义一个基数池。

在这里插入图片描述

var result = [];
var type = true;
function sort(array , column , i) {
    let data = {};
    data['0']='';data['1']='';data['2']='';data['3']='';data['4']='';data['5']='';data['6']='';data['7']='';data['8']='';
    data['9']='';data['a']='';data['b']='';data['c']='';data['d']='';data['e']='';data['f']='';data['g']='';data['h']='';
    data['i']='';data['j']='';data['k']='';data['l']='';data['m']='';data['n']='';data['o']='';data['p']='';data['q']='';
    data['r']='';data['s']='';data['t']='';data['u']='';data['v']='';data['w']='';data['x']='';data['y']='';data['z']='';
    data['A']='';data['B']='';data['C']='';data['D']='';data['E']='';data['F']='';data['G']='';data['H']='';data['I']='';
    data['J']='';data['K']='';data['L']='';data['M']='';data['N']='';data['O']='';data['P']='';data['Q']='';data['R']='';
    data['S']='';data['T']='';data['U']='';data['V']='';data['W']='';data['X']='';data['Y']='';data['Z']='';
    array.forEach(function (obj) {
        if (!data[obj[column].charAt(i)])  data[obj[column].charAt(i)] = [obj];
        else data[obj[column].charAt(i)].push(obj);
    });
    let recursion=[];
    for (let key in data){
        if (!data[key]){
            delete data[key];
            continue;
        }
        if (data[key].length > 1){
            if ( !(!data[key].some(function (value, index) {
                return value[column] !== data[key][0][column];
            }))){
                recursion.push(key);
            }
        }
    }
    if (recursion.length > 0){
        i++;
        recursion.forEach(function (key) {
            data[key] = this.sort(data[key] ,column , i);
        });
    }
    return data;
}

function sortInit(array, column ,type, i=0 ) {
    result = [];
    if (type === 'up') this.type = true;
    else this.type = false;
    merge(sort(array, column, i));
    return result;
}

function merge(object) {
    for (let key in object){
        if (Array.isArray(object[key])){
            if (this.type) result.push.apply(result,object[key]);
            else result.unshift.apply(result,object[key]);
        }else merge(object[key]);
    }
}
需排序数据量小,不考虑空间复杂度

使用时调用sortInit传递 需要进行排序的数组,依据排序字段名,正序或逆序,排序标准从第几个字符起
该js为我自己项目定制化,排序数据为对象数组,因中文排序需要引用数据字典暂不加。

单指针双递归,递归结束后的结构为一个N层的对象,对象内如为数组即为标准数据。
第二次递归,将N层对象递归合并到新数组中

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值