バブルソート
バブルの原理は、最大の要素または最小の要素を「フロート」にすることです
ソートを挿入し、ソートを選択し、クイックソート、バブルソートはすべて比較ソートです
アイデア
隣接する2つの数字を1つずつ比較し、小数を前に置き、背面に大きな数字を置きます。
ステップ1:1番目と2番目の数値を比較し、小数を前に置き、後に多数を置きます。 2番目の数値と3番目の数値を比較し、小数を大きな数値の前後に置き、最後の2つの数値を比較するまでこのように続け、小数を前後に置きます。
ステップ2:2回目のトリップ:最初の対数から開始します(2番目の数値と3番目の数値の交換が原因であるため、最初の数値は2番目の数値よりも小さくなりません)、小数点の前後に小数を置き、ペナグリテーション番号まで比較します(最初の位置はすでに最大の位置で最大です)。 2回目の旅行の終わりに、最後から2番目の位置(実際にはシーケンス全体で2番目に大きい数)で新しい最大数が得られます。
これが続く場合は、ソートが最終的に完了するまで上記のプロセスを繰り返します。
デシマルは常に前方に配置され、ソートプロセス中に多数が後方に配置されるため、バブルの上昇に相当するため、バブルソートと呼ばれます。
バブルソートアニメーション効果
実装:このコードは比較的単純で、アルゴリズムで最も基本的で基本的なコードです。 。 。
注意すべき3つのこと
1.クラスを交換する方法は、a = [b、b = a] [0]でJavaScriptで解決できます。
交換する
コードコピーは次のとおりです。
var、a、b、温度
temp = a;
a = b;
B =温度
この交換方法
2。array.lengthがキャッシュされているループ変数のキャッシュに注意してください
3.埋め込みループに注意を払ってください。これは、最初の数値からn番目の最後の数値と比較することであり、nは比較ステップ番号です
関数bubblesort(array){var l = array.length; for(var i = 0; i <l; i ++){//比較されたステップ数は、(var j = 0; j <li; j ++)の配列の長さです{//インライン交換の数は、最初の数字の長さである[J] < {array [j] = [array [j -1]、array [j -1] = array [j]] [0] // swap要素}} for(var k = 0; k <l; k ++){console.log(array [k]+"、");} console.log( 'this is the'+1)+'and+' and+'and+' and+'and en [6,54,6,22,5,7,8,2,34]; Bubblesort(a);アニメーション効果
挿入ソート
とても簡単です。カードに触れて挿入するためのステップです!
アイデア:
1最初に、カードに触れたとし、手の中のすべてのカードが空に設定されているとしましょう= []プッシュに触れた(arr [0])
2次のカードを取り出し、それをAに設定し、すべてのカードの空のすべてのカードで背面から前面にスキャンします(すでにソートされています)
3手のカードが空の場合[empty.length-n](並べ替え)新しい要素よりも大きい場合、カードを次の位置に移動します(リリーススペース)空[empty.length-n] = empty [empty.length-n+1]
4reepeatステップ3ソートされたカードが空の[empty.length-n]が等しくなるまで等しくなるまで
5この位置にaを挿入します空[empty.length-n] = a
6ステップ2を繰り返します
ただし、JavaScriptコードを実装するのは少し難しく、コードは次のとおりです。
関数挿入(arr){var l = arr.length; var empty = []; // empty array、empty.push(arr [0]); //最初に写真に触れてみましょう(var i = 1; i <l; i ++){//ここでの出発点は1です。 if(arr [i]> empty [empty.length -1]){empty [empty.length] = arr [i]} //順序付けられた配列がemptyよりも大きい場合は、var j = empty.length; j> 0 && arr [i] <empty [j -1]; j-){// arrの最大値をarrを空にするために最大値を比較します。順序付けられた配列の特定のビットの場合、それを移動する必要はありません。 empty [j] = empty [j -1]; //空の移動[j -1] = arr [i]; //値を空の位置に置く} // console.log(empty)} empty}}次に、ここでより重要な知識ポイントは&&シンボルです。つまり、「と」を意味します。つまり、式が確立される前に両側の条件を満たす必要があります。
&&シンボルは、たとえば(a){fun()}がa && bに等しい場合にも置き換えることができます
別の非常に重要なポイント
配列がarrであると仮定すると、その「最後のアイテム」はarr [arr.length-1]です。
アニメーションをソートします
選択ソート
また、シンプルなソートアルゴリズムでもあります。
アイデア:
最小の要素を見つけます - それを配列に投げます - 再び小さなものを見つけます - それを配列に投げます。
まず、未解決のアレイで最小の要素を見つけます。見つけた方法は、継続的な判断と割り当ての手段、つまり、つまり、配列の最初の要素配列[0]を最小の要素とし、アレイの「最小要素」のシーケンス番号を0にします。
次に、配列を繰り返します。配列の2番目の要素がそれよりも小さい場合、2番目の要素は最小の要素であり、「0」を「1」に更新します。
横断した後、このシリーズの最小要素の添え字は「n」であることがわかります。ソートシーケンスの開始位置(配列[n])に取り出して保存されます
次に、残りの未解決の要素から最小の要素を探し続けてから、ソートされたシーケンスの最後に配置します。トラバーサルの添え字は、この時点で1から始まることに注意してください。すでに最小の要素を選んでいるからです。
すべての要素がソートされるまで。
関数selectsort(array){var min; var l l = array.length; //(var i = 0; i <l; i ++){// loop、loop、loopを1倍に合計で1倍にすることができます。 (array [min]> array [j])//後続のmin = j; //「最小」subscript}を更新するかどうかを判断します。たとえば、アレイの最初のアイテムはiです。その後、最小の要素は配列[min]であることがわかりました。そのため、この分をiと交換する必要があります。等々。 array [i] = [array [min]、array [min] = array [i]] [0]; // swap要素}} return array;}ここでまだ指摘されているのは、交換配列の書き込み方法[i] = [array [min]、array [min] = array [i]] [0]です。
配列[i]と配列[min]〜を交換するのは簡単です
アニメーションをソートします
クイックソート
クイックソートは、現在最も強力なソートアルゴリズムであり、再帰のアイデアを利用しています。
アイデア
配列から要素を選択することは、「ベンチマーク」と呼ばれます。これは、長さ/2を使用して直接選択できます
配列を介して、基準値よりも小さいすべての要素が参照の前に配置され、参照値よりも大きいすべての要素が参照の背後に配置されます(同じ数値を使用できます)。素人の言葉で言えば、男性は左側に立っており、女性は右側に立っています。 。
次に、ベンチマークよりも大きな部品で構成されるベンチマーク +アレイラレイよりも小さい部品で構成される配列配列=配列ラーレを取得します。
その後、私たちはLarrayとRarrayを「同じ」プロセスするだけです〜
これには、再帰ライティングの使用が必要です。処理後、LarrayはLarrayのベンチマークに分割されます。これは、Larrayのベンチマークよりも小さく、Larrayのベンチマークよりも大きいです。 。
それから私たちは物事を続け、男性は左側に立って、女性は右側に立っています。 。
Larrayの長さが1になることがわかるまで、これは再び分割するのに十分ではありませんが、ソートは終わったと思います。
関数QuickSort(arr){var l = arr.length; // cached array length if(arr.length <= 1){return arr}; //ラーレとラレイの長さが1より小さい場合、並べる必要はありません〜var num = math.floor(arr.length/2); //配列の中央で数値を選択します。長さ/2は必ずしも整数ではないことに注意してください。 Math.floorを使用してvar numvalue = arr.splice(num、1)[0]; //スプライスメソッドを使用して要素を使用し、構文var left = []; //左の参照コンテナvar右= []; left.push(arr [i]):right.push(arr [i]); //男性は左側に立っており、女性は右側に立っています。 。 } quicksort(左).concat([numvalue]、quicksort(右))//再帰的に、左右のアレイで動作し続けます。 }アニメーション効果:
ここでは、arr.splice(num、1)は1つの数値のみを描画しますが、スプライスの結果は[0]を必要とする配列でもあります。そうしないと、結果は不思議なことにアレイの配列の束になります(1)。 。 。
スプライスリファレンス://www.vevb.com/w3school/js/jsref_splice.htm
Math.floorは、Math Objects //www.vevb.com/w3school/js/js_obj_math.htmのリファレンスです
再帰とは:http://baike.baidu.com/view/96473.htm
クイックソートに加えて、上記の4つのアルゴリズムはすべて単純なソートアルゴリズムであり、これらの4つのアルゴリズムはインタビュー中に非常に頻繁に撮影されます〜
ここでは、上記のアルゴリズムがループと配列に関する多くの関連する知識を使用していることを強調することが依然として重要です。そのため、覚えなければなりません!