亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

js算法中的排序、數組去重詳細概述

2019-11-20 21:53:40
字體:
來源:轉載
供稿:網友

其實在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+'<br/>'+arrSort);

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

二、數組去掉重復

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

復制代碼 代碼如下:

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

Array.prototype.indexOf = function(n){ 
    for(var i=0;i<this.length;i++){ 
        if(this[i] == n){ 
            return i; 
        } 
    } 
    return -1; 

function removeDup(arr){ 
    var result = []; 
    for(var i=0;i<arr.length;i++){ 
        if(result.indexOf(arr[i]) == -1){ 

            result.push(arr[i]); 
        } 
    } 
    return result;  

var arr2 = removeDup(arr) 
document.write(arr+'<br/>'+arr2)

算法數組去掉重復
復制代碼 代碼如下:

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

Array.prototype.indexOf = function(n){ 
    for(var i=0;i<this.length;i++){ 
        if(this[i] == n){ 
            return i; 
        } 
    } 
    return -1; 

function removeDup(arr,s,e){ 
    if(s==e){ 
        //分割就剩下一個 
        return [arr[s]] 
    }else if(s==e-1){ 
        //為了優化 剩下兩個就不用分割啦 
        if(arr[s]==arr[e]){ 
            return [arr[s]] 
        }else{ 
            return [arr[s],arr[e]]; 
        } 
    } 
    //數組平分成兩段, 
    var l = Math.floor((s+e)/2); 
    //左邊 
    var arrL = removeDup(arr,s,l); 
    //右邊 
    var arrR = removeDup(arr,l+1,e); 
    //結果 先把左邊的復制進去 
    var result = arrL; 
    //循環 將不重復的數據插入到結果里面 
    for(var i=0;i<arrR.length;i++){ 
        if(result.indexOf(arrR[i])== -1 ) result.push(arrR[i]) 
    } 
    return result; //返回結果 

var arrDup = removeDup(arr, 0, arr.length-1); 
document.write(arr+'<br/>'+arrDup);

講解:將重復的數組 切割,拆分到最后只剩下一個數據或或者兩個數組,將左邊的數據放到結果里面,右邊重復的跳過 不重復插入,直到循環完,返回結果就可以

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久999| 清纯唯美亚洲综合| 久久国产精品影片| 精品美女永久免费视频| 欧美一级大片视频| 欧美一区二区色| www.亚洲免费视频| 色狠狠av一区二区三区香蕉蜜桃| 欧美裸体xxxx| 精品一区精品二区| 国内精品一区二区三区四区| 亚洲最新中文字幕| 成人在线免费观看视视频| 国产精品直播网红| 青青在线视频一区二区三区| 欧美成人精品在线播放| 中文字幕亚洲欧美一区二区三区| 久久夜色精品国产亚洲aⅴ| 精品国产91久久久| 国产综合久久久久| 欧美成人合集magnet| 日韩精品视频在线播放| 国产小视频国产精品| 国产精品视频内| 91在线观看免费高清完整版在线观看| 97视频在线观看网址| 欧美日韩国产精品专区| 亚洲国产成人爱av在线播放| 91精品国产高清久久久久久91| 久久91亚洲精品中文字幕| 一道本无吗dⅴd在线播放一区| 亚洲精品久久久久久久久久久久| 国产精品成人aaaaa网站| 中文字幕精品国产| 日本精品视频在线播放| 狠狠色香婷婷久久亚洲精品| 成人有码视频在线播放| 久久久久中文字幕| 亚洲欧美国产精品专区久久| 亚洲精品美女久久久久| 欧美激情久久久| 亚洲自拍偷拍第一页| 久久精品99无色码中文字幕| 中文字幕精品一区二区精品| 91精品国产高清自在线| 国产免费成人av| 人体精品一二三区| 中文字幕亚洲综合久久| 亚洲成av人片在线观看香蕉| 成人在线小视频| 欧美成人精品一区| 青青久久av北条麻妃海外网| 日韩中文字幕免费| 亚洲性视频网站| 国产精品久久激情| 国产精品自拍偷拍| 亚洲电影成人av99爱色| 亚洲欧美中文另类| 国产丝袜一区二区三区免费视频| 午夜精品一区二区三区av| www.久久久久| 欧美重口另类videos人妖| 668精品在线视频| 91亚洲精华国产精华| 亚洲变态欧美另类捆绑| 欧美精品18videosex性欧美| 久久久久久噜噜噜久久久精品| 97在线视频观看| 亚洲人a成www在线影院| 欧美日韩精品在线播放| 久久天天躁狠狠躁夜夜躁| 97av在线视频| 亚洲精品久久久一区二区三区| 日韩av在线资源| 亚洲天堂av在线播放| 亚洲性69xxxbbb| 2019精品视频| 亚洲第五色综合网| 色婷婷久久av| 91免费精品国偷自产在线| 欧美又大又硬又粗bbbbb| 欧美午夜精品久久久久久久| 国产情人节一区| 久久久久久久久久久国产| 日韩暖暖在线视频| 91久久精品久久国产性色也91| 亚洲欧美日韩成人| 久久人人爽人人爽爽久久| 国产精品99久久久久久白浆小说| 亚洲免费一在线| 亚洲一二三在线| 国产98色在线| 91精品国产777在线观看| 亚洲一区国产精品| 欧美性xxxx极品hd欧美风情| xxx欧美精品| 亚洲精品日产aⅴ| 欧美乱大交做爰xxxⅹ性3| 国产精品极品美女粉嫩高清在线| 亚洲曰本av电影| 日韩中文字幕在线视频播放| 中文字幕一区电影| 国产亚洲激情在线| 国产精品日本精品| 91成人天堂久久成人| 欧美日韩性生活视频| 久久精品国产久精国产一老狼| 亚洲国产欧美久久| 欧美国产亚洲视频| 欧美老女人在线视频| 中文字幕av一区二区| 国产精品高潮视频| 国产欧美精品一区二区| 欧美成人精品激情在线观看| 久久久久国产精品一区| 国产精品激情av在线播放| 欧美午夜电影在线| 久久香蕉频线观| 亚洲aⅴ日韩av电影在线观看| 欧美日产国产成人免费图片| 一区二区亚洲欧洲国产日韩| 国产欧美日韩精品在线观看| 久久av在线播放| 国产a∨精品一区二区三区不卡| 久热精品视频在线观看一区| 日韩av影片在线观看| 亚洲娇小xxxx欧美娇小| 最近2019年日本中文免费字幕| 国产拍精品一二三| 日韩在线小视频| 在线视频亚洲欧美| 性金发美女69hd大尺寸| 最近2019年日本中文免费字幕| 欧美日韩中文字幕综合视频| 97avcom| 亚洲自拍偷拍第一页| 91中文字幕一区| 青草热久免费精品视频| 国产精品三级美女白浆呻吟| 久久久成人精品| 亚洲石原莉奈一区二区在线观看| 国产成人久久久| 亚洲精品www久久久| 日韩成人中文字幕| 日韩专区在线观看| 久久91精品国产91久久跳| 精品丝袜一区二区三区| 亚洲区中文字幕| 日本19禁啪啪免费观看www| 欧美中文字幕在线视频| 欧美视频在线看| 中文字幕视频一区二区在线有码| 亚洲另类图片色| 亚洲男人7777| 永久免费精品影视网站| 色狠狠久久aa北条麻妃| 热re99久久精品国产66热| 欧美日韩中文在线| 一区二区三区国产视频| 亚洲免费成人av电影| 亚洲在线第一页| 欧美精品第一页在线播放| 亚洲欧美精品中文字幕在线| 久久青草福利网站|