理解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;



var arr = [2,34,242,12,3,2,23,3];// 定義一個數組
 
arr.sort(function (a,b) {
     // a -->代表每一次執行匿名函時候,找到的數組中的當前項;
     // b -->代表當前項的后一項;
 
     return a - b; // 升序時: 如果a>b,那么返回的值>0,a和b交換位置;
return b - a; // 降序時: 如果b>a,那么返回的值>0,a和b交換位置; //-> 原理:return的值可能是一個大於0的數也或者可能是小於等於0的數,如果return后的值大於0則讓數組a和b交換一下位置;小於等於0,則原來數組中的位置不變; return 1; // 表示不管a和b誰大,每一次都返回一個恆大於0的數,也就是說每一次a和b都要交換位置,最后的結果就是原有數組倒過來排列了,相當於數組的reverse()方法; })


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM