面试题之(sort排序)

jeckson

共 1138字,需浏览 3分钟

 · 2021-05-11

面试主要问题是有无参数时候的区区别。

1

如果省略参数,元素按照转换为的字符串的各个字符的Unicode位点进行排序。

let arr = ['General','Tom','Bob','John','Army'];let resArr = arr.sort();console.log(resArr);//输出   ["Army", "Bob", "General", "John", "Tom"]let arr2 = [30,10,111,35,1899,50,45];let resArr2 = arr2.sort();console.log(resArr2);//输出   [10, 111, 1899, 30, 35, 45, 50]

2

传入参数,实现升序,降序;

let arr3 = [30,10,111,35,1899,50,45];arr3.sort(function(a,b){   return a - b;})console.log(arr3);//输出  [10, 30, 35, 45, 50, 111, 1899]    let arr4 = [30,10,111,35,1899,50,45];arr4.sort(function(a,b){   return b - a;})console.log(arr4);//输出 [1899, 111, 50, 45, 35, 30, 10]

3

当json对象时候使用对象某属性即可

let arr5 = [{id:10},{id:5},{id:6},{id:9},{id:2},{id:3}];arr5.sort(function(a,b){    return a.id - b.id})console.log(arr5);    //输出新的排序    //    {id: 2}    //    {id: 3}    //    {id: 5}    //    {id: 6}    //    {id: 9}    //    {id: 10}

值得一提的是,sort排序的算法使用了两种,如果是小于10的,直接采用插入排序,稳定性较高,时间复杂度也不高。如果大于10,则采用快速排序,找到基准,左右判断,不断递归判断排序。

总结

至于为什么会是按unicode编码排序,主要是因为源码里面它会自动判断,如果没有没有传入函数参数,它会把它转为字符串进而按unicode编码排序。也有的伙伴会说是按ascll码排序,主要是因为unicode码属于全世界统一的编码,基本上所有的字符都能找到,而ascll码只是方便某一方面方便使用才出现的,而它字符包含得也不是很多。

浏览 8
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报