" />
最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

js算法中的排序、數(shù)組去重詳細概述_javascript技巧

來源:懂視網 責編:小采 時間:2020-11-27 21:14:21
文檔

js算法中的排序、數(shù)組去重詳細概述_javascript技巧

js算法中的排序、數(shù)組去重詳細概述_javascript技巧:其實在js中實現(xiàn)數(shù)組排序,采用數(shù)組中sort方法實現(xiàn)還是比較簡單的: 一、排序 簡單實現(xiàn)數(shù)組排序 代碼如下:var arr = []; for(var i=0;i arr.push(Math.floor(Math.random()*100)) } arr.sort(function(a,b){ return a>
推薦度:
導讀js算法中的排序、數(shù)組去重詳細概述_javascript技巧:其實在js中實現(xiàn)數(shù)組排序,采用數(shù)組中sort方法實現(xiàn)還是比較簡單的: 一、排序 簡單實現(xiàn)數(shù)組排序 代碼如下:var arr = []; for(var i=0;i arr.push(Math.floor(Math.random()*100)) } arr.sort(function(a,b){ return a>

其實在js中實現(xiàn)數(shù)組排序,采用數(shù)組中sort方法實現(xiàn)還是比較簡單的:

一、排序

簡單實現(xiàn)數(shù)組排序
代碼如下:
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字母順序排序的,而非我們認為是按數(shù)字大小排序,

sort() 方法可以接受一個 方法為參數(shù) ,這個方法有兩個參數(shù)。分別代表每次排序比較時的兩個數(shù)組項。sort()排序時每次比較兩個數(shù)組項都回執(zhí)行這個參數(shù),并把兩個比較的數(shù)組

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

算法的數(shù)組排序
代碼如下:
var arr = [];
for(var i=0;i<20;i++){
arr.push(Math.floor(Math.random()*100))
}
//生成一個無序的arr數(shù)組
function sort(arr,start,end){
//數(shù)組長度為1
if(start == end ){
return [arr[start]]
}else if(start == end-1){
//數(shù)組長度為2,根據(jù)數(shù)值大小 來排序
if(arr[start]>arr[end]){
return [arr[end],arr[start]]
}else{
return [arr[start],arr[end]]
}
}
// 數(shù)組長度一半
var l = Math.floor((start+end)/2);
//左邊數(shù)組
var arrLeft = sort(arr, start,l);
//右邊數(shù)組
var arrRight = sort(arr,l+1,end);
//返回結果
var result = [];
//分割成兩部分 左右兩個數(shù)組 只比對數(shù)組中的第一個數(shù),那個數(shù)值小就把誰放到結果里面,并把小的數(shù)值刪除掉,固采用數(shù)組中的shift方法。一旦出現(xiàn)左邊數(shù)組或右邊數(shù)組,沒有數(shù)據(jù)的時候
//result數(shù)組就與還有數(shù)據(jù)的數(shù)組合并 采用 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] result.push(arrLeft.shift())
}else{
result.push(arrRight.shift());
}
}
return result;
}
var arrSort = sort(arr,0,arr.length-1);//參數(shù) 數(shù)組,開始位置,結束位置

document.write(arr+'
'+arrSort);

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

二、數(shù)組去掉重復

簡單方法去掉重復:先聲明一個空的數(shù)組,將重復的數(shù)組 for 循環(huán)插入,重復的跳過 不重復的插入
代碼如下:
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 if(this[i] == n){
return i;
}
}
return -1;
}
function removeDup(arr){
var result = [];
for(var i=0;i if(result.indexOf(arr[i]) == -1){

result.push(arr[i]);
}
}
return result;
}
var arr2 = removeDup(arr)
document.write(arr+'
'+arr2)

算法數(shù)組去掉重復
代碼如下:
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 if(this[i] == n){
return i;
}
}
return -1;
}
function removeDup(arr,s,e){
if(s==e){
//分割就剩下一個
return [arr[s]]
}else if(s==e-1){
//為了優(yōu)化 剩下兩個就不用分割啦
if(arr[s]==arr[e]){
return [arr[s]]
}else{
return [arr[s],arr[e]];
}
}
//數(shù)組平分成兩段,
var l = Math.floor((s+e)/2);
//左邊
var arrL = removeDup(arr,s,l);
//右邊
var arrR = removeDup(arr,l+1,e);
//結果 先把左邊的復制進去
var result = arrL;
//循環(huán) 將不重復的數(shù)據(jù)插入到結果里面
for(var i=0;i if(result.indexOf(arrR[i])== -1 ) result.push(arrR[i])
}
return result; //返回結果
}
var arrDup = removeDup(arr, 0, arr.length-1);
document.write(arr+'
'+arrDup);

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

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

js算法中的排序、數(shù)組去重詳細概述_javascript技巧

js算法中的排序、數(shù)組去重詳細概述_javascript技巧:其實在js中實現(xiàn)數(shù)組排序,采用數(shù)組中sort方法實現(xiàn)還是比較簡單的: 一、排序 簡單實現(xiàn)數(shù)組排序 代碼如下:var arr = []; for(var i=0;i arr.push(Math.floor(Math.random()*100)) } arr.sort(function(a,b){ return a>
推薦度:
標簽: js 詳細 排序
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top