5)連結ソート
2106 ワード
マージソートは、分割征服(Split征服)メソッドを使用するアルゴリズムです.
結果は,
しかし、急速なソートとは異なり、最悪の場合も
次の質問を見てください.
以下の数字を昇順に並べ替えるプログラムを作成してください.
( 7, 6, 5, 8, 3, 5, 9, 1 )
解答に示すように,8つの配列空間が存在する場合はmergesortで半分に分ける.
[ 7, 6, 5, 8, 3, 5, 9, 1 ]
上の列を半分に開く.
[7 ,6, 5, 8] [3, 5, 9, 1]
また分ける.
[6, 7] [5, 8] [3, 5] [1, 9]
次に、上の小さな数字と大きな数字を比較して、順序を変更します.
[6, 7] [5, 8]
次に、上記の数値をソートし、1つずつ集計します.
[5, 6, 7, 8]
集計ソートを実施する場合、
つまり、ソートに使用する配列をグローバル変数として宣言する必要があります.
関数で配列を宣言する場合は、配列を1つずつ宣言する必要があります.
これは、メモリリソースの浪費が非常に大きいためです.
デフォルトでは、
必要性から、メモリの利用効率が低いという問題がある.
マージソートは、高速ソートよりも遅いが、
結果は,
O(N*logN)
の時間的複雑さを有する高速ソートと同様であった.しかし、急速なソートとは異なり、最悪の場合も
O(N*logN)
を保障しなければならない.次の質問を見てください.
以下の数字を昇順に並べ替えるプログラムを作成してください.
( 7, 6, 5, 8, 3, 5, 9, 1 )
#include <iostream>
using namespace std;
int number = 8;
int sorted[8];
void merge(int a[], int m, int middle, int n){
int i = m;
int j = middle + 1;
int k = m;
while (i <= middle && j <= n) {
if (a[i] <= a[j]) {
sorted[k] = a[i];
i++;
}
else {
sorted[k] = a[j];
j++;
}
k++;
}
if (i > middle) {
for (int t = j; t <= n; t++)
{
sorted[k] = a[t];
k++;
}
}
else
{
for (int t = i; t <= middle; t++)
{
sorted[k] = a[t];
k++;
}
}
for (int t = m; t <= n; t++)
{
a[t] = sorted[t];
}
}
void mergesort(int a[], int m, int n) {
if (m < n) {
int middle = (m+n) / 2;
mergesort(a, m, middle);
mergesort(a, middle + 1, n);
merge(a, m, middle, n);
}
}
int main(void) {
int array[8] = { 7, 6, 5, 8, 3, 5, 9, 1 };
mergesort(array, 0, number - 1);
for (int t = 0; t < number; t++)
{
cout << array[t];
}
}
マージソートは、2つの小さな問題を別々に計算し、最後にマージする方法です.解答に示すように,8つの配列空間が存在する場合はmergesortで半分に分ける.
[ 7, 6, 5, 8, 3, 5, 9, 1 ]
上の列を半分に開く.
[7 ,6, 5, 8] [3, 5, 9, 1]
また分ける.
[6, 7] [5, 8] [3, 5] [1, 9]
次に、上の小さな数字と大きな数字を比較して、順序を変更します.
[6, 7] [5, 8]
次に、上記の数値をソートし、1つずつ集計します.
[5, 6, 7, 8]
集計ソートを実施する場合、
つまり、ソートに使用する配列をグローバル変数として宣言する必要があります.
関数で配列を宣言する場合は、配列を1つずつ宣言する必要があります.
これは、メモリリソースの浪費が非常に大きいためです.
デフォルトでは、
必要性から、メモリの利用効率が低いという問題がある.
マージソートは、高速ソートよりも遅いが、
O(N*logN)
を保証する効率的なアルゴリズムである.Reference
この問題について(5)連結ソート), 我々は、より多くの情報をここで見つけました https://velog.io/@syk7925/5-병합정렬テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol