首頁 >web前端 >js教程 >javascript演算法中的排序方法使用詳解

javascript演算法中的排序方法使用詳解

伊谢尔伦
伊谢尔伦原創
2017-07-22 14:43:171209瀏覽

其實在js中實作陣列排序,採用陣列中sort方法實作還是比較簡單的:

一、排序

簡單實作數組排序

var arr = [];  
for(var i=0;i<20;i++){  
    arr.push(Math.floor(Math.random()*100))  
}  
arr.sort(function(a,b){  
    return a>b?1:-1;  
})  
alert(arr)

不能簡單使用sort方法,預設情況下sort方法是按ascii字母順序排序的,而非我們認為是按數字大小排序,

sort() 方法可以接受一個方法為參數,這個方法有兩個參數。分別代表每次排序比較時的兩個陣列項。 sort()排序時每次比較兩個陣列項目都會回執行這個參數,並且把兩個比較的陣列

項目當作參數傳遞給這個函數。當函數傳回值為1的時候就交換兩個數組項的順序,否則就不交換。

演算法的陣列排序

var arr = [];  
for(var i=0;i<20;i++){  
    arr.push(Math.floor(Math.random()*100))  
}  
//生成一个无序的arr数组  
function sort(arr,start,end){  
    //数组长度为1  
    if(start == end ){  
        return [arr[start]]  
    }else if(start == end-1){  
        //数组长度为2,根据数值大小 来排序  
        if(arr[start]>arr[end]){  
            return [arr[end],arr[start]]  
        }else{  
            return [arr[start],arr[end]]  
        }  
    }  
    // 数组长度一半  
    var l = Math.floor((start+end)/2);  
    //左边数组  
    var arrLeft = sort(arr, start,l);  
    //右边数组  
    var arrRight = sort(arr,l+1,end);  
    //返回结果  
    var result = [];  
    //分割成两部分 左右两个数组 只比对数组中的第一个数,那个数值小就把谁放到结果里面,并把小的数值删除掉,固采用数组中的shift方法。一旦出现左边数组或右边数组,没有数据的时候  
    //result数组就与还有数据的数组合并 采用 concat,并返回结果  
    while(arrLeft.length>0 || arrRight.length>0){  
        if(arrLeft.length==0){  
            result = result.concat(arrRight);  
            break;  
        }else if(arrRight.length==0){  
            result = result.concat(arrLeft);  
            break;  
        }  
        if(arrLeft[0]<arrRight[0]){  
            result.push(arrLeft.shift())  
        }else{  
            result.push(arrRight.shift());  
        }  
    }  
    return result;  
}  
var arrSort = sort(arr,0,arr.length-1);//参数 数组,开始位置,结束位置  
document.write(arr+&#39;<br/>&#39;+arrSort);

講解:陣列排序主要是採用將陣列一拆為二,直到不能為之,最後只能是拆掉陣列裡面只能是一個或是兩個,因為數組的長度有奇數偶數之分,拆到最後數組裡面只有一個或兩個之後開始排序並傳回結果,並將這些結果在一一比對進行合併。這個方法可能大家覺得為什麼要這麼複雜,一直採用第一種不行嗎,其實當然可以啦,但是這個世界上還有性能這個詞彙,當數據之後幾個幾十個幾個百,大家的算出的結果時間是沒有什麼差別的,如果當資料龐大的幾億幾十億我們還有這種自信用第一種方法嗎,其實js的演算法就是分而治之,將很多問題分成小的來解決。

以上是javascript演算法中的排序方法使用詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn