js sort原理

JavaScript010

js sort原理,第1张

js提供了sort方法,方便对数组进行排序,然而不同引擎对js的sort方法解析可能存在差异。本文基于v8引擎进行分析。

在v8引擎中,对sort方法提供了2种排序算法:插入排序及快排序。

sort使用方法:

当没有参数传入的时候,其排序顺序默认为,将待排序数据转换为字符串,并按照 Unicode 序列排序;当然,比较函数可以自定义,自定义排序函数需要返回值,其返回值为 -1,0,1 ,分别表示 a<b, a=b, a>b.

当数组长度小于等于10的时候,采用插入排序,大于10的时候,采用快排。

对于长度大于1000的数组,采用的是快排与插入排序混合的方式进行排序的,因为,当数据量很小的时候,插入排序效率优于快排。

快排的平均时间复杂度是nlogn,在排序算法中属于效率最高的。快排是一种不稳定的排序算法,但是一般情况下稳定或者不稳定对我们没有特别大的影响,但是对稳定性要求高的排序,就不能使用快排了。

原文: https://zhuanlan.zhihu.com/p/33626637

先解释一下

data是数组

sort是数组类型自带的一个排序函数,函数的参数是一个函数(也就是方法)

然后先看createComparisonFunction函数

这个函数返回了一个方法

其方法参数在返回方法内用到,符合了执行作用域的条件,形成闭包,保留了propertyName函数

然后看你的排序data.sort(createComparisonFunction("name"))

你在排序的时候传入参数createComparisonFunction("name")

在执行sort之前会先执行createComparisonFunction("name")

他会返回一个方法,其执行作用域保留

然后开始走排序

data.sort方法会内部循环值排序,他每次比较的2个值会传入你传入的函数参数内,通过你传入的函数参数来判断排序

最后简单解释下createComparisonFunction

object1: 比较的第一个值

object2: 比较的第二个值

propertyName: 就是执行createComparisonFunction的参数

data["name"]其实就是data.name的另一种写法

JS数组多条件排序基于Array.sort()方法,首先要了解sort()方法的用法。

sort()方法可以传入一个函数作为参数,然后依据该函数的逻辑,进行数组的排序。

eg:

sort()方法接收函数作为参数时,排序主要根据传入函数的返回值是否大于0进行排序。

1)当 a-b <0时,则a元素排在b元素的前面;(a、b元素位置不变)

2)当a-b= 0时,a,b元素的位置不变;

3)当a-b >0时,则b元素排在a元素的前面。(a、b元素位置交换)

当数组元素为对象时,若要根据对象的多个属性进行排序,就涉及到多条件排序。