首頁 > web前端 > js教程 > js演算法中的排序、陣列去重詳細概述_javascript技巧

js演算法中的排序、陣列去重詳細概述_javascript技巧

WBOY
發布: 2016-05-16 17:20:03
原創
1332 人瀏覽過

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

一、排序

簡單實作陣列排序

複製程式碼 程式碼如下:

var arr = [] ; 
for(var i=0;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    arr.push(Math.floor(Math.random()*100)) 

//生成一個無序的arr陣列 
function sort(arr,start,end){ 
    //陣列長度為1 
    if(start == end ){ 
    if(start }else if(start == end-1){ 
        //陣列長度為2,依數值大小排序 
       end],arr[start]] 
        }else{ 
            return [arr[start] >    // 陣列長度一半 
    var l = 數學。 arr,l 1,end); 
    //回傳結果 
    var result = []; 
    //分割成兩部分左右兩個陣列只比對數組中的第一個數,那個數值小就把誰放到結果裡面,並把小的數值刪除掉,固採用數組中的shift方法。一旦出現左邊數組或右邊數組,沒有資料的時候 
    //result數組就與還有資料的數組合併採用concat,並返回結果 
    while(arrLeft.length>0 || arrRight.length>0 ){ 
        if(arrLeft.length==0){ 
           🎜>        }else if(arrRight.length==0){ 
result = result.concat(arrLeft); 
            break; 
        }            result.push(arrLeft.shift()) 
}else{ 
            result.push(arrRight.shift()); 
       🎜>var arrSort = sort(arr,0,arr.length -1);//參數數組,開始位置,結束位置 

document.write(arr '
' arrSort);


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

二、陣列去掉重複

簡單方法去掉重複:先宣告一個空的數組,將重複的數組for 循環插入,重複的跳過不重複的插入

複製程式碼 程式碼如下:

var arr = []; 
for(var i=0;i    arr.i    arr.push(parseInt. (Math.random()*10)); 

Array.prototype.indexOf = function(n){ 
    for(var i=0;i        if(this[i] == n){ 
            return i; 
   🎜>} 
function removeDup(arr){ 
    var result = []; 
    for(var i=0;i        if(result.indexOf(arr[i]) == -1){    if(result.indexOf(arr[i]) == -1){    if(result.indexOf(arr[i]) == -1){   > result.push(arr[i]); 
        } 
    } 
    return result;  

var arr2 = removeDup(arr) 
document.write(arr '
' arr2)


演算法陣列去掉重複



複製程式碼
Array.prototype.indexOf = function(n){ 
    for(var i=0;i     >            return i; 
        } 
    } 
 🎜>    if(s==e){ 
//分割剩下一個 
        return [arr[s]] 
    }else if(s==e-1){ 
       (arr[s]==arr[e]){ 
            return [arr[s]] 
        
        }
    } 
    //陣列平分成兩段, 
    var l = Math.floor((s e)/2); 
  l); 
    //右邊 
    var arrR = removeDup(arr,l 1,e); 
    //結果先將左邊的複製進去     for(var i=0;i        if(result.indexOf(arrR[i])== -11) result   if(result.indexOf(arrR[i])== -11) result push(arrR[i]) 
    } 
    return result; //回傳結果 

var arrDup = removeDup(arr, 0, arr
var arrDup = removeDup(arr, 0, arr. (arr '
' arrDup);


講解:將重複的數組切割,拆分到最後只剩下一個資料或或兩個數組,將左邊的資料放到結果裡面,右邊重複的跳過不重複插入,直到循環完,回傳結果可以
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板