其實在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的演算法就是分而治之,將很多問題分成小的來解決。
以上是javascript演算法中的排序方法使用詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!