sort内部实现原理

sort方法的基本使用:
arr.sort([compareFunction])
compareFunction用来指定某种顺序进行排列的函数,如果不写。元素按照转换为字符串的unicode码进行排序。

  const months = ['March', 'Jan', 'Feb', 'Dec'];
  months.sort();
  console.log(months);
  const arr1 = [1,23,43,34,5,4,12098];
  arr1.sort();
  console.log(arr1);

在这里插入图片描述
可以看到,字符串排序是没问题的。但数字排序不正确,因为数字转换为字符串后字符串的第一个元素的unicode决定了元素的排序。

所以需要指定compareFunction。
a取值范围nums[1] – nums[nums.length-1]
b取值范围nums[0] – nums[nums.length-2]

如果 compareFunction(a, b)小于 0,那么a,b位置交换;
如果 compareFunction(a, b)等于 0,a 和 b 的相对位置不变;
如果 compareFunction(a, b)大于 0,a 和 b 的相对位置不变。

sort排序分析
如果要排序的元素个数是 n 的时候,那么就会有以下几种情况:
当 n<=10 时,采用插入排序;
当n>10时,采用快速排序;

理论上,快速排序的时间复杂度是O(nlogn),插入排序是O(n2)
实际上,当数据量很大时,快速排序优势更大。但当数据量较小时,插入排序性能会超过快速排序。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值