ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript アルゴリズムでの並べ替えメソッドの使用方法の詳細な説明
実際、配列のsortメソッドを使用してjsで配列のソートを実装するのは比較的簡単です:
1. ソート
配列のソートの簡単な実装
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メソッドを使用することはできません。デフォルトでは、ソートメソッドは、私たちが考えている数値サイズによるソートではなく、ASCII アルファベット順にソートされます。
sort() メソッドは、メソッドをパラメータとして受け入れることができます。このメソッドには 2 つのパラメータがあります。各並べ替え比較における 2 つの配列項目を表します。 sort() がソートする場合、2 つの配列項目が比較されるたびにこのパラメーターが実行され、比較された 2 つの配列項目がパラメーターとしてこの関数に渡されます。関数が値 1 を返した場合、2 つの配列項目の順序は交換されます。それ以外の場合は交換されません。
アルゴリズムの配列ソート
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);
説明: 配列のソートでは、主に配列を 2 つに分割できなくなるまで使用します。配列の長さは After であるため、最終的には 1 つまたは 2 つに分割することしかできません。最終的な配列に 1 つまたは 2 つだけになるまで奇数と偶数を分割し、並べ替えが開始されて結果が返され、これらの結果が 1 つずつ比較されてマージされます。なぜこの方法がこんなに複雑なのかと思われるかもしれませんが、実際にはもちろん使用できますが、データが数十、数百、すべての人の場合でもパフォーマンスという言葉が使われます。計算された結果 データが数億または数十億もの巨大な場合、まだ最初の方法を使用する自信がありますか? 実際、js のアルゴリズムは、多くの問題を小さな問題に分割して解決します。解決する。
以上がJavaScript アルゴリズムでの並べ替えメソッドの使用方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。