手動による配列ソート
メニューを表示するにはスワイプしてください
ソートはプログラミングにおける基本的な操作であり、データを整理することで検索、分析、情報の提示をより効率的に行うことが可能となる。C#には配列をソートするための組み込みメソッドが用意されているが、ソートアルゴリズムの仕組みを理解することで、アルゴリズム的思考や問題解決力を深めることができる。selection sortのような手動ソートアルゴリズムを学ぶことで、要素がどのように比較され、順番に移動してソート済み配列が完成するかを段階的に把握できる。この理解は、カスタムソートロジックが必要な場合や、ライブラリのサポートが限られている環境で作業する際に重要となる。
Selection sortは、配列の未ソート部分から繰り返し最小(昇順の場合)または最大(降順の場合)の要素を選択し、それをソート済み部分の正しい位置に移動させる単純なソートアルゴリズム。
Program.cs
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849using System; namespace ConsoleApp { public class Program { public static void Main(string[] args) { int[] numbers = { 5, 2, 9, 1, 5, 6 }; Console.WriteLine("Original array:"); PrintArray(numbers); SelectionSortAscending(numbers); Console.WriteLine("Sorted array (ascending):"); PrintArray(numbers); } public static void SelectionSortAscending(int[] array) { int n = array.Length; for (int i = 0; i < n - 1; i++) { int minIndex = i; for (int j = i + 1; j < n; j++) { if (array[j] < array[minIndex]) { minIndex = j; } } int temp = array[i]; array[i] = array[minIndex]; array[minIndex] = temp; } } public static void PrintArray(int[] array) { foreach (int num in array) { Console.Write(num + " "); } Console.WriteLine(); } } }
選択ソートは、配列を整列済み部分と未整列部分に分割して動作します。各ステップで、未整列部分から最小の要素を選択し、それを未整列部分の先頭の要素と交換することで、整列済み部分を1つずつ拡張していきます。
上記のコードでは、配列の最後の要素を除く各要素に対してループを開始します。各位置iについて、残りの配列(i + 1から末尾まで)で最小値を探します。より小さい要素が見つかった場合、minIndexを更新します。内側のループが終わった後、位置iの要素とminIndexの要素を交換し、最小値が現在の位置に配置されるようにします。この処理を繰り返すことで、配列全体が昇順に整列されます。
Program.cs
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849using System; namespace ConsoleApp { public class Program { public static void Main(string[] args) { int[] numbers = { 3, 8, 4, 7, 2, 9 }; Console.WriteLine("Original array:"); PrintArray(numbers); SelectionSortDescending(numbers); Console.WriteLine("Sorted array (descending):"); PrintArray(numbers); } public static void SelectionSortDescending(int[] array) { int n = array.Length; for (int i = 0; i < n - 1; i++) { int maxIndex = i; for (int j = i + 1; j < n; j++) { if (array[j] > array[maxIndex]) { maxIndex = j; } } int temp = array[i]; array[i] = array[maxIndex]; array[maxIndex] = temp; } } public static void PrintArray(int[] array) { foreach (int num in array) { Console.Write(num + " "); } Console.WriteLine(); } } }
このコードは、Programクラス内にMainメソッドを定義し、整数配列を選択ソートで降順に並べ替える方法を示しています。まず、numbers配列を初期化し、元の内容を出力します。その後、SelectionSortDescendingメソッドを呼び出して、配列を大きい順に並べ替えます。このメソッドは、未整列部分から最大値を繰り返し探し、未整列部分の先頭の要素と交換することで動作します。ソート後、プログラムは更新された配列を出力し、要素が降順に並んでいることを示します。
1. 選択ソートの計算量はどれですか?
2. 選択ソートはバブルソートとどのように異なりますか?
3. 組み込みメソッドを使わずに手動でソートを実装する理由は何ですか?
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください