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>