コア コード:
function QuickSort(arr){
//配列に数値が 1 つしかない場合は、それを直接返します。
if(arr.length<1){
return arr;
}
//浮動小数点数の場合は切り捨てます。
var centerIndex = Math.floor(arr.length/2)
// 中央のインデックス値に基づいてこの数値を見つけます。 number;
var centerNum = arr.splice(centerIndex,1);
//左側の数値を格納します
var arrLeft = []//右側の数値を格納します
var arrRight = [];
for (i=0;i
if(arr[i]arrLeft.push(arr[i] )
}else if(arr[i ]>centerNum){
arrRight.push(arr[i])
}
}
return QuickSort(arrLeft).concat(centerNum,クイックソート(arrRight));
var arrSort = [33,18,2,40,16,63,27]; (arr1);
主な原則: クイックソートの原則: 参照点を見つけ、2 つの配列を作成して別々に保存し、再帰
参照点:配列の中央の数値を見つけます。
2 つの配列を作成し、それらを別々に保存します。この参照点を使用して、その左と右の値を 2 つの定義された新しい配列にそれぞれ保存します。再帰: 関数内で自身を呼び出します。
ここで要約するのは、再帰を使用する場合です。
1. 判定が必要で、それ以外の場合は無限ループになります。 2. 内部的に自分自身を呼び出す場合、渡されるパラメータは内部で定義された変数です。この変数は、初めて渡されるパラメータに関連しています。
3. 同じ作業を実行するには、再帰を使用することを検討できます。
初めて関数を実行する場合 変数の状況:ループ内の判定条件により真ん中の数値が40、40未満の場合はarrLeftに格納され、40より大きい場合はarrLeftに格納されます。 、arrRightに保存されます。以下に示すように
関数
が 2 回目に呼び出されたとき、実行により QuickSort(arrLeft).concat(centerNum,quickSort(arrRight)) が返されます。 ) 関数が呼び出され、渡されるパラメータは [33,18,2,16,27] です。
中央の数字は 2 で、2 より小さい数字は左側の arrLeft に配置され、2 より大きい数字はは右arrRightに配置されます
最後に、quickSort(arrRight) を呼び出します。
その後、渡されたパラメーターの長さが 1 未満になるまでループ内で自分自身を呼び出し、その後、渡されたパラメータパラメータ。