この記事では主に、バブル ソート、クイック ソート、挿入ソートなど、js 配列でよく使用されるソート方法をいくつか紹介します。お役に立てれば幸いです。
1. バブルソート(後ろから前へ)
var array = [1,4,-8,-3,6,12,9,8];function sort(arr){ for(var j=0;j<arr.length-1;j++){ //两两比较,如果前一个比后一个大,则交换位置。 for(var i=0;i<arr.length-1-j;i++){ if(arr[i]>arr[i+1]){ var temp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = temp; } } } } sort(array); document.write(array);
(1) 隣接する要素を比較します。最初のものが 2 番目のものより大きい場合は、位置を交換します。
(2) 隣接する要素の各ペアに対して、最初の最初のペアから最後の最後のペアまで、同じ作業を実行します。この時点では、最後の要素が最大の数値である必要があります。
(3) 最後の要素を除くすべての要素に対して上記の手順を繰り返します。
(4) 比較する数値のペアがなくなるまで、要素の数を減らしながら上記の手順を繰り返します。
2. クイックソート: 再帰的思考、両側での高速ソート、バブルソートの改良
var array = [1,4,-8,-3,6,12,9,8]; function quickSort(arr){//如果数组长度小于等于1,则返回数组本身 if(arr.length<=1){ return arr; } //定义中间值的索引 var index = Math.floor(arr.length/2); //取到中间值 var temp = arr.splice(index,1); //定义左右部分数组 var left = []; var right = []; for(var i=0;i<arr.length;i++){ //如果元素比中间值小,那么放在左边,否则放右边 if(arr[i]<temp){ left.push(arr[i]); }else{ right.push(arr[i]); } } return quickSort(left).concat(temp,quickSort(right)); } document.write(quickSort(array));
Math.floor(x) メソッドは、 x 以下の最も近い整数を切り捨てて返します。
splice(index,num,item) メソッドは、配列に項目を追加するか、配列から項目を削除して、削除された項目を返します。
indexは整数、操作したアイテムの位置(必須)
numは整数、削除するアイテムの数、0の場合は削除しないことを意味する(必須)
item は配列です 追加される新しい項目は複数にすることができます (オプション)
push() メソッドは、1 つ以上の新しい項目を配列の末尾に追加し、新しい配列の長さを返します
concat() メソッドは 2 つまたは複数の配列を結合します。元の配列は変更されず、新しい配列が返されます
3. 挿入ソート
var array = [1,4,-8,-3,6,12,9,8];function insertSort(arr){ //假设第0元素是有序序列,第1元素之后是无序的序列。从第1元素开始依次将无序序列的元素插入到有序序列中 for(var i=1; i<arr.length;i++){ if(arr[i]<arr[i-1]){ //取出无序序列中需要插入的第i个元素 var temp = arr[i]; //定义有序中的最后一个位置 var j = i-1; arr[i] = arr[j]; //比较大小,找到插入的位置 while(j>=0&&temp<arr[j]){ arr[j+1] = arr[j]; j--; }; //插入 arr[j+1] = temp; } } } insertSort(array) document.write(array);
(1) 最初の要素から、要素ソートされたとみなせる
(2) 次の要素を取り出し、ソートされた要素列をスキャン
(3) (ソートされた) 要素が新しい要素より大きい場合、その要素を次の要素に移動します次の位置
(4) 並べ替えられた要素が新しい要素以下になる位置が見つかるまでステップ 3 を繰り返します
(5) 新しい要素を次の位置
に挿入します (6) 手順 2 を繰り返します
4. 選択ソート
var array = [1,4,-8,-3,6,12,9,8];function selectSort(arr){ for(var i=0;i<arr.length;i++){ //设置当前范围最小值和索引 var min = arr[i]; var minIndex = i; //在该范围选出最小值 for(var j=i+1;j<arr.length;j++){ if(min>arr[j]){ min = arr[j]; minIndex = j; } } //将最小值插入,并将原来位置的最小值删除 arr.splice(i,0,min); arr.splice(minIndex+1,1); } } selectSort(array); document.write(array);
(1) ソートされていないシーケンスの中で最も小さい (大きい) 要素を見つけて
(2) の開始位置に格納します。ソートされたシーケンス
(3) 次に、ソートされていない残りの要素から、最小 (大きい) 要素
(4) を見つけて、ソートされたシーケンスの最後に置きます。
(5)など
以上がjs 配列で一般的に使用されるソート方法のいくつかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。