sort排序到底怎么排序


sort()方法

sort() 方法在適當的位置對數組的元素進行排序,並返回數組。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script>
            var arr=[1,11,2,22,5,4,0];
            arr.sort();
            alert(arr);//[0,1,11,2,22,4,5]
        </script>
    </head>
    <body>
    </body>
</html>

由上圖可以看出:數組會按照字符的Unicode進行排序(把數組里面當成字符串處理)。

 

按升序排列:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script>
            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]
        </script>
    </head>
    <body>
    </body>
</html>

隨機排序:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script>
            var arr=[1,11,2,22,5,4,0];
            arr.sort(
                function(n1,n2){
                    return Math.random()-0.5;
                });
            alert(arr);
        </script>
    </head>
    <body>
    </body>
</html>

sort()方法如何實現排序

  怎么查看sort()方法是如果實現排序的呢?我們可以在比較函數里把a,b及數組輸出一下,看看是否能夠看出使用的排序算法。

var arr=[1, 8, 3, 5, -1]; function compare(a,b){ console.log(a,b,arr); return a-b; } arr.sort(compare); /** 控制台輸出 1 8 [1, 8, 3, 5, -1] 8 3 [1, 8, 3, 5, -1] 1 3 [1, 8, 8, 5, -1] 8 5 [1, 3, 8, 5, -1] 3 5 [1, 3, 8, 8, -1] 8 -1 [1, 3, 5, 8, -1] 5 -1 [1, 3, 5, 8, 8] 3 -1 [1, 3, 5, 5, 8] 1 -1 [1, 3, 3, 5, 8] [-1,1, 3, 5, 8] */

  第一次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, 還僅僅是覆蓋,繼續往下!
  第七、八、九次,-1依次和5,3,1做了比較,並且5,3,1都移動了一次位置。

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

 

模擬排序:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script>
            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);
        </script>
    </head>
    <body>
    </body>
</html>

 


免責聲明!

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



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