如何实现数组末位排序

比如一个数组:

[235, 42, 8, 100]

现在需要按末位进行排序, 最后的结果应该是:

[100, 42, 235, 8]

请问:如何实现这个功能, 需要的是算法


感谢@lejoy指点, 一个简单的冒泡末位排序可以这样:

function sort(arr) {
    for (let i = 0; i < arr.length; i++) {
        for (let j = 1; j < arr.length; j++) {
            // 和冒泡排序差别就在这行...
            if (arr[j] % 10 < arr[j - 1] % 10) {
                let tmp = arr[j - 1]
                arr[j - 1] = arr[j]
                arr[j] = tmp
            }
        }
    }
    console.log(arr)
}
sort([55, 41, 32, 23, 19])
阅读 2.8k
4 个回答

和普通的排序方式一样。比如,冒泡排序:遍历,比较二者。区别在于:你这个需求,在比较的时候,两个值都 %10 取模, 小的放前面,大的放后面...

其他语言怎么排js就怎么排吧 不实用内置函数不就纯算法了嘛

我的这个如果 末位相同可能就会有问题 你自己再处理一下, 但是就现在的数据是可以的

const arr = [235, 42, 8, 100]; // 末位排序
const map = {};
const lastArr = arr.map(i => {
    const str = i.toString();
    const strArr = [];
    for(let s of str) {
        strArr.push(s);
    };
    map[strArr[str.length - 1]] = i;
    return Number(strArr[str.length - 1]);
});
const newArr = [];
lastArr.sort().forEach(i => {
    if(i in map) {
        newArr.push(map[i])
    }
})
log(newArr) // [100, 42, 235, 8]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题