C#を使用してマージソートを実行するにはどうすればよいですか?
マージソートは、分割統治法を使用するソートアルゴリズムです。配列を2つの部分に分割し、これら2つの部分のそれぞれに対して自身を呼び出します。このプロセスは、配列がソートされるまで続けられます。
C#でのマージソートを示すプログラムは次のとおりです-
例
using System; namespace QuickSortDemo { class Example { static public void merge(int[] arr, int p, int q, int r) { int i, j, k; int n1 = q - p + 1; int n2 = r - q; int[] L = new int[n1]; int[] R = new int[n2]; for (i = 0; i < n1; i++) { L[i] = arr[p + i]; } for (j = 0; j < n2; j++) { R[j] = arr[q + 1 + j]; } i = 0; j = 0; k = p; while (i < n1 && j < n2) { if (L[i] <= R[j]) { arr[k] = L[i]; i++; } else { arr[k] = R[j]; j++; } k++; } while (i < n1) { arr[k] = L[i]; i++; k++; } while (j < n2) { arr[k] = R[j]; j++; k++; } } static public void mergeSort(int[] arr, int p, int r) { if (p < r) { int q = (p + r) / 2; mergeSort(arr, p, q); mergeSort(arr, q + 1, r); merge(arr, p, q, r); } } static void Main(string[] args) { int[] arr = {76, 89, 23, 1, 55, 78, 99, 12, 65, 100}; int n = 10, i; Console.WriteLine("Merge Sort"); Console.Write("Initial array is: "); for (i = 0; i < n; i++) { Console.Write(arr[i] + " "); } mergeSort(arr, 0, n-1); Console.Write("\nSorted Array is: "); for (i = 0; i < n; i++) { Console.Write(arr[i] + " "); } } } }
出力
上記のプログラムの出力は次のとおりです。
Merge Sort Initial array is: 76 89 23 1 55 78 99 12 65 100 Sorted Array is: 1 12 23 55 65 76 78 89 99 100
上記のプログラムを理解しましょう。
main()関数では、最初に初期配列が表示されます。次に、関数mergeSort()が呼び出され、配列に対してマージソートが実行されます。このためのコードスニペットは次のとおりです。
int[] arr = {76, 89, 23, 1, 55, 78, 99, 12, 65, 100}; int n = 10, i; Console.WriteLine("Merge Sort"); Console.Write("Initial array is: "); for (i = 0; i < n; i++) { Console.Write(arr[i] + " "); } mergeSort(arr, 0, n-1);>
関数mergeSort()では、qは配列の中点として計算されます。次に、作成された両方のサブ配列でmergeSort()が呼び出されます。最後に、これらのサブ配列をマージするmerge()が呼び出されます。このためのコードスニペットは次のとおりです。
if (p < r) { int q = (p + r) / 2; mergeSort(arr, p, q); mergeSort(arr, q + 1, r); merge(arr, p, q, r); }
関数merge()では、2つのソートされたサブ配列が提供されます。この関数は基本的に、結果の配列もソートされるように、これらのサブ配列を単一の配列にマージします。このためのコードスニペットは次のとおりです。
int i, j, k; int n1 = q - p + 1; int n2 = r - q; int[] L = new int[n1]; int[] R = new int[n2]; for (i = 0; i < n1; i++) { L[i] = arr[p + i]; } for (j = 0; j < n2; j++) { R[j] = arr[q + 1 + j]; } i = 0; j = 0; k = p; while (i < n1 && j < n2) { if (L[i] <= R[j]) { arr[k] = L[i]; i++; } else { arr[k] = R[j]; j++; } k++; } while (i < n1) { arr[k] = L[i]; i++; k++; } while (j < n2) { arr[k] = R[j]; j++; k++; } while (j < n2) { arr[k] = R[j]; j++; k++; }
-
JavaScriptでマージソートを実装する方法は?
マージソート マージソートは、分割統治タイプのソートアルゴリズムの例です。マージソートの入力は、いくつかの要素の配列であり、通常、最小から最大に配置する必要があります。 マージソートで従う手順 マージソートは、配列を2つのサブ配列に分割し、後で各配列を別の2つの配列に分割し、以下同様に、多数の単一要素配列が残るまで続けます。たとえば、次の例では、配列[4,7,5,9,1,3,8,2]は、[4]、[7]、[5]、[9]などの単一の配列要素に分割されます。 [1]、[3]、[8]、[2]。 2つのアレイが比較され、連結されるように、アレイの比較が開始されます。次の例では、一度に2つの配列を
-
JavaScriptを使用してHTMLリストを並べ替える方法は?
JavaScriptを使用してHTMLリストを並べ替えるには、コードは次のとおりです- 例 <!DOCTYPE html> <html> <body> <h1>Sorting list example</h1> <button>Click to sort</button> <ul class="animalList"> <li>Giraffe</li> <li>Camel</li> <li>Dog</li>