イベントアドレス: CSDN 21 日間学習チャレンジ
序文
古典的な並べ替えアルゴリズムは聞いたことがある人、使ったことがある人も多いかもしれませんが、聞いたことがない人も多いでしょう。なぜ?フレームワークや依存パッケージが増えてきた今、実際のソートのシーンを使って業務として機能に落とし込むことができるようになるため、機能は知っていても動作ロジックを知らない人もいます。
以上を踏まえて、関数の操作ロジックをよりよく理解するために、基本的なソート方法の操作ルールと個人的な理解を整理しました。
バブルソート
バブル ソートは基本的なソート アルゴリズムの 1 つです. その核となる考え方は, 隣接する要素をペアで比較することです. 大きい数は沈み, 小さい数は上昇します. 大きな数はその後に来ます. このプロセスは小さなものから大きなものへのバブルのようなものです.バブルソートといいます。
バブルソートの原理
- 走査はソートされ、隣接する 2 つの要素が順番に比較されます。
- 順序が正しい: 代表的な位置が正しく、交換は必要ありません。
- 順序が間違っています。2 つの要素を交換して順序を正しくします。
各パスは、数字を正しいソートに入れることしかできません。つまり、最初のパスは最後の数字の戻り値のみを決定でき、2 番目のパスは最後から 2 番目の数字のみを返すことができます。ソートする数値が n 個ある場合、n-1 個の数値のみをソートする必要があります。つまり、n-1 回の操作が必要です。
配列の長さを n とすると、トラバーサル インデックスは i で、0 から始まります。
これは、各トラバーサルが現在の最大値を n - 1 - i の位置に配置するためです。つまり、[ n-1-i,n-各走査の後に 1 ] 間隔の要素は正の順序で配置され、[0,n-1-i] は無秩序に配置されます。
そして、「すべての旅行」は、最初の桁から開始して2つの隣接する数字を比較し、大きい方の数字を後ろに置き、比較が完了したら1桁後ろに移動して、次の2つの隣接する数字を比較し続ける必要があります サイズの関係、最後の数字までこの手順を繰り返しますまだ戻っていない番号。
コード
function bubbleSort(array) {
let length = array.length;
//遍历数组所有元素
for (let i = 0; i < length - 1; i++) {
//遍历未排序数组,即[0,length-1-i]的区间
for (let j = 0; j < length - 1 - i; j++) {
//两个挨着的元素进行比较,如果前一个比后一个大,则位置交换
if (array[j] > array[j + 1]) {
let item = array[j];
array[j] = array[j + 1];
array[j + 1] = item;
}
}
}
console.log("bubbleSort result:", array);
}
bubbleSort([1, 2, 3, 10, 9, 17, 6, 5, 7]);
複雑さ
時間の複雑さ: O(n^2);
空間の複雑さ: O(n^2);
メッセージ
以上がバブルソーティングの流れです。参考になれば幸いです!
すべての研究に意味があるわけではありませんが、深く掘り下げたいのであれば、意味のあるものでなければなりません