Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
92 changes: 92 additions & 0 deletions ja/ソートアルゴリズム/バブルソート.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
# バブルソート

#### 問題提起

ソートしていないn個の要素を持つ配列を指定し、それをソートする関数を作成しましょう。

#### アプローチ

- 指定された配列の要素の中で一番最初のものを選びます。その要素をEとします
- Eと、Eの次の要素を比較します
- Eの次の要素の値よりEの値のほうが大きい場合、2つの値を入れ替えます
- そうでない場合、特に何も行いません
- 指定された配列の中のインデックス毎に行います
- 上記の処理をn回繰り返し行います。

#### 時間計算量

`O(n^2)` 最悪計算量

`O(n)` 最良計算量

`O(n^2)` 平均計算量

#### 空間計算量

`O(1)` 最悪計算量

#### 確立者

- バブルソートという名前は、ケネス・アイバーソンが1962年に最初に使われました。

#### 例

```
arr[] = {10, 80, 40, 30}
Indexes: 0 1 2 3

1. Index = 0, Number = 10
2. 10 < 80, 何もせずに操作を続行します

3. Index = 1, Number = 80
4. 80 > 40, 値を入れ替えます
5. 現在の配列: {10, 40, 80, 30}

6. Index = 2, Number = 80
7. 80 > 30, 値を入れ替えます
8. 現在の配列: {10, 40, 30, 80}

上記の手順をまた繰り返します。

arr[] = {10, 40, 30, 80}
Indexes: 0 1 2 3

1. Index = 0, Number = 10
2. 10 < 40, 何もせずに操作を続行します

3. Index = 1, Number = 40
4. 40 > 30, 値を入れ替えます
5. 現在の配列: {10, 30, 40, 80}

6. Index = 2, Number = 40
7. 40 < 80, 何もしません
8. 現在の配列: {10, 30, 40, 80}

上記の手順をまた繰り返します。

arr[] = {10, 30, 40, 80}
Indexes: 0 1 2 3

1. Index = 0, Number = 10
2. 10 < 30, 何もせずに操作を続行します

3. Index = 1, Number = 30
4. 30 < 40, 何もせずに操作を続行します

5. Index = 2, Number = 40
6. 40 < 80, 何もしません

上記の操作では値の入れ替えがないため、配列をソートし終えたことになり、操作を止めることができます。
```

#### 説明動画

[バブルソートアルゴリズムの説明動画](https://www.youtube.com/watch?v=Jdtq5uKz-w4)

#### その他

バブルソートはシンキングソートという別名を持っています。

#### アニメーションを用いた説明

- [Tute Board](https://boardhub.github.io/tute/?wd=bubbleSortAlgo2)