sort的排序及使用

sort() 方法在適當的位置對數組的元素進行排序,並返回數組。數組會按照字符的Unicode進行排序(把數組裏面當成字符串處理)html

1. 按升序排列:算法

var arr=[1,11,2,22,5,4,0];
            arr.sort(
                function(n1,n2){
                    return n1-n2;
                });
alert(arr);//[0,1,2,4,5,11,22]

2. 隨機排序:數組

var arr=[1,11,2,22,5,4,0];
            arr.sort(
                function(n1,n2){
                    return Math.random()-0.5;
                });
 alert(arr);

 3. 按降序排列:dom

var arr=[1,11,2,22,5,4,0];
            arr.sort(
                function(n1,n2){
                    return n2-n1;
                });
alert(arr);

 4. 根據參數屬性值排序(sort方法接收一個函數做爲參數,這裏嵌套一層函數用來接收對象屬性名,其餘部分代碼與正常使用sort方法相同。函數

var arr = [
    {name:'zopp',age:0},
    {name:'gpp',age:18},
    {name:'yjj',age:8}
];

function compare(property){
    return function(a,b){
        var value1 = a[property];
        var value2 = b[property];
        return value1 - value2;
    }
}
console.log(arr.sort(compare('age')))

5. 根據參數不一樣,來肯定是升序排列,仍是降序排序ui

sortBy: function(attr,rev){
    //第二個參數沒有傳遞 默認升序排列
    if(rev ==  undefined){
        rev = 1;
    }else{
        rev = (rev) ? 1 : -1;
    }
    return function(a,b){
        a = a[attr];
        b = b[attr];
        if(a < b){
            return rev * -1;
        }
        if(a > b){
            return rev * 1;
        }
        return 0;
    }
}
newArray.sort(sortBy('number',false))

V8 引擎 sort 函數只給出了兩種排序 InsertionSort 和 QuickSort,數量小於10的數組使用 InsertionSort,比10大的數組則使用 QuickSort。spa

 

原理:sort()方法如何實現排序

第一次1和8比較,1<8,不須要調整位置。   

  第二次8和3比較,8>3,須要調整位置。可是這裏沒有交換位置,僅僅是8覆蓋了3位置。這裏就能夠推斷出不是單純的使用了冒泡算法。
  第三是1和3比較,1<3,3替換了8的位置。什麼鬼,幾個意思???看到這裏我也是表示不懂呀。那就繼續往下看咯。   

  第四是8和5比較,8>5,又僅僅是覆蓋,沒有交換位置。仍是不懂,繼續往下!
  第五是3和5比較,3<5,5替換了8的位置,不懂,繼續往下!   

  第六是8和-1比較,8>-1, 還僅僅是覆蓋,繼續往下!
  第7、8、九次,-1依次和5,3,1作了比較,而且5,3,1都移動了一次位置。

咱們得出告終論:sort()方法是使用的冒泡和插入兩種方式結合進行排序的。.net

模擬排序:code

 var arr=[32,12,4,20,1,54,56,6,14];
            function findMinIndex(arr,start){
                var iMin=arr[start];
                var iMinIndex=start;
                for(var i=start;i<arr.length;i++){
                    if(iMin>arr[i]){
                        iMin=arr[i];
                        iMinIndex=i;
                    }
                }
                return iMinIndex;
            }
            for(var i=0;i<arr.length;i++){
                var n=findMinIndex(arr,i);
                var tem;
                tem=arr[n];
                arr[n]=arr[i];
                arr[i]=tem;
            }
alert(arr);

參考:http://www.javashuo.com/article/p-rarxtyfw-gz.htmlhtm

         https://blog.csdn.net/u011250873/article/details/78731162

相關文章
相關標籤/搜索