🙌
【C#アルゴリズム】素朴なソートアルゴリズム
はじめに
paiza 、アルゴリズムの本で素朴なソートアルゴリズムについて学んだのでまとめました。
素朴なソートアルゴリズムは、比較的簡単で直感的に理解しやすいアルゴリズムの総称で、これらは計算回数やソートの基本原理を理解するのに適しています。ただし、効率が低いため、大量のデータには向きません。
代表的な素朴なソートアルゴリズムであるバブルソート、選択ソート、挿入ソートについてまとめました。
1. バブルソート (Bubble Sort)
- 概要: 配列内の隣接する要素を比較し、小さいものを左側に移動させる操作を繰り返します。配列が完全にソートされるまでこのプロセスを繰り返します。
-
特徴:
-
計算量 :
O(n^2)
-
計算量 :
-
実装例 (csharp):
private static void BubbleSort(int[] A, int n) { for (int i = 0; i < n - 1; i++) { for (int j = n - 1; j >= i + 1; j--) { if (A[j] < A[j - 1]) { int temp = A[j]; A[j] = A[j - 1]; A[j - 1] = temp; } } Console.WriteLine(string.Join(" ", A)); } }
2. 選択ソート (Selection Sort)
- 概要: 配列内で最小(または最大)の要素を探し、それを現在の位置に移動します。この操作を配列全体で繰り返します。
-
特徴:
-
時間計算量 :
O(n^2)
-
時間計算量 :
-
実装例 (csharp):
private static void SelectionSort(int[] A, int n) { for (int i = 0; i < n - 1; i++) { int minIndex = i; for (int j = i + 1; j < n; j++) { if (A[j] < A[minIndex]) { minIndex = j; } } //Swap(タプルでも行える) int temp = A[minIndex]; A[minIndex] = A[i]; A[i] = temp; Console.WriteLine(string.Join(" ", A)); } }
3. 挿入ソート (Insertion Sort)
- 概要: 配列の要素を一つずつ取り出し、既にソートされた部分に挿入することで配列をソートします。
-
特徴:
-
計算量: 悪の場合
、最良の場合(すでにソートされている場合)は (O(n))O(n^2)
-
計算量: 悪の場合
-
実装例 (csharp):
private static void InsertionSort(int[] A, int n) { for (int i = 1; i < n; i++) { int x = A[i]; int j = i - 1; while (j >= 0 && A[j] > x) { A[j + 1] = A[j]; j--; } A[j + 1] = x; Console.WriteLine(string.Join(" ", A)); } }
特徴比較
アルゴリズム | 時間計算量 (平均) | 時間計算量 (最良) |
---|---|---|
バブルソート | ||
選択ソート | ||
挿入ソート |
おすすめ・参考書籍
問題解決力を鍛える!アルゴリズムとデータ構造 (KS情報科学専門書)
データ構造とアルゴリズム[第2版] (新・情報/通信システム工学)
Discussion