js提供了sort方法售担,方便對數(shù)組進(jìn)行排序勇吊,然而不同引擎對js的sort方法解析可能存在差異蜂科。本文基于v8引擎進(jìn)行分析顽决。
在v8引擎中,對sort方法提供了2種排序算法:插入排序及快排序崇摄。
sort使用方法:
var arr=[];
arr.sort();//默認(rèn)排序
arr.sort(comparefn(a,b));//自定義排序比較方法
當(dāng)沒有參數(shù)傳入的時候擎值,其排序順序默認(rèn)為,將待排序數(shù)據(jù)轉(zhuǎn)換為字符串逐抑,并按照Unicode
序列排序;當(dāng)然屹蚊,比較函數(shù)可以自定義厕氨,自定義排序函數(shù)需要返回值进每,其返回值為-1,0命斧,1
田晚,分別表示a<b, a=b, a>b.
當(dāng)數(shù)組長度小于等于10的時候,采用插入排序国葬,大于10的時候贤徒,采用快排。
對于長度大于1000的數(shù)組汇四,采用的是快排與插入排序混合的方式進(jìn)行排序的接奈,因?yàn)椋?dāng)數(shù)據(jù)量很小的時候通孽,插入排序效率優(yōu)于快排序宦。
快排的平均時間復(fù)雜度是nlogn,在排序算法中屬于效率最高的背苦』グ疲快排是一種不穩(wěn)定的排序算法,但是一般情況下穩(wěn)定或者不穩(wěn)定對我們沒有特別大的影響行剂,但是對穩(wěn)定性要求高的排序秕噪,就不能使用快排了。
原文:https://zhuanlan.zhihu.com/p/33626637