1. 程式人生 > >理解sort()函式的排序原理

理解sort()函式的排序原理

看了很多關於sort()函式的定義和解釋還是不太清楚,尤其是初學者很容易看懵,這裡講講自己是如何理解的。 

首先,要理解sort()內部是利用遞迴進行氣泡排序的;

例如:

var arr = [1, 5, 4, 2];

sort()方法的比較邏輯為:
第一輪:1和5比,1和4比,1和2比
第二輪:5和4比,5和2比
第三輪:4和2比

其次,sort()方法會接受一個比較函式compare(a, b),該函式要比較兩個值,然後返回一個用於說明這兩個值的相對順序的數字。

最後,永遠要記住一句話,凡是返回1或者大於0的正數的時候就要交換位置。(內部實現)

例如:

var
arr = [1, 5, 4, 2];

現在要進行升序排列,從左到右的陣列項關係最終應該為: a < b < c < d
所以只要在當a大於b的時候去交換它們的位置就好了:

if(a > b ) {
    return 1;
}

簡化後:

// 升序
return a - b;
// 倒序
return b - a;