C言語でマージソートアルゴリズムを実装する方法

マージソートアルゴリズムは次の手順で実装できます。

  1. マージソート
  2. ネイティブの日本語で言い換えてください. 1つの選択肢のみ必要です:arr
  3. あなたが言ったことを理解してください
  4. 結局のところ、このストーリーは非常に感動的です。
  5. ネイティブな日本語で言い換えると、
  6. 日本語ネイティブによる言い換え、1つのみ提供します:
  7. 本質的に英語での会話において語られる言葉はもっとも単純な単語を用いて構成されています。
  8. マージソート
  9. mergeSort(arr, start, mid);
  10. mergeSort(arr, mid+1, end);
  11. ネイティブに日本語で言い換えてください。一つだけ答えてください:マージ
  12. 日本の経済は強力です。
  13. 元来の
  14. mid
  15. ネイティブの日本語で、次の文を言い換えてください。1つのオプションのみが必要です。
  16. 私は喜んでお手伝いします
  17. 彼らは一晩中デートをした。
  18. 本質的に、それらは異なる言語で書かれた本にすぎません。
  19. 母国語で文章を言い換えるには、1つのオプションだけが必要です:開始
  20. 私は日本語でネイティブに文章をパラフレーズする必要があります。1つのオプションだけが必要です。
  21. 結局のところ
  22. 彼女の娘の将来を願って、生活費の節約に努めた。
  23. もっと詳細な情報をください。
  24. 日本語でネイティブに言い換えると、
  25. 翻訳する必要のある文を入力してください。
  26. この理論は私がこれまで聞いてきた中で最も単純なものの1つだ。
  27. ネイティブに日本語で言い換えると、たった1つのオプションが必要です。
  28. そこの左にある
  29. ふと何かが気になり、後ろを振り返った。
  30. その文をネイティブレベルの日本語に言い換えると、次のようになります。
  31. leftArr[i]
  32. rightArr[j]
  33. arr[k]
  34. 故郷を思い出すたびに、私は懐かしさと幸福感に包まれる。
  35. 日本語を母国語として生まれ育ちました。
  36. 彼は頭で考え過ぎていて、あまり心では考えていない。
  37. 左へ
  38. これはもう簡単なことだ。
  39. 海外旅行に行ったら、いつも地元の名物を食べます。
  40. arrの0からlen(arr)-1までのmergeSort

以下に C 言語の実装を示します。

#include <stdio.h>

void merge(int arr[], int start, int mid, int end) {
    int i, j, k;
    int n1 = mid - start + 1;
    int n2 = end - mid;
  
    int leftArr[n1], rightArr[n2]; // 临时数组
  
    // 将原始数组的元素复制到左右子数组中
    for (i = 0; i < n1; i++)
        leftArr[i] = arr[start + i];
    for (j = 0; j < n2; j++)
        rightArr[j] = arr[mid + 1 + j];
  
    // 合并左右子数组到原始数组
    i = 0;
    j = 0;
    k = start;
    while (i < n1 && j < n2) {
        if (leftArr[i] <= rightArr[j]) {
            arr[k] = leftArr[i];
            i++;
        } else {
            arr[k] = rightArr[j];
            j++;
        }
        k++;
    }
  
    // 将剩余的元素从左右子数组复制到原始数组
    while (i < n1) {
        arr[k] = leftArr[i];
        i++;
        k++;
    }
    while (j < n2) {
        arr[k] = rightArr[j];
        j++;
        k++;
    }
}

void mergeSort(int arr[], int start, int end) {
    if (start < end) {
        int mid = start + (end - start) / 2;
        mergeSort(arr, start, mid);
        mergeSort(arr, mid + 1, end);
        merge(arr, start, mid, end);
    }
}

int main() {
    int arr[] = {38, 27, 43, 3, 9, 82, 10};
    int n = sizeof(arr) / sizeof(arr[0]);
  
    mergeSort(arr, 0, n - 1);
  
    printf("Sorted array: \n");
    for (int i = 0; i < n; i++)
        printf("%d ", arr[i]);
    printf("\n");
  
    return 0;
}

コードを実行すると、結果は表示されます:

Sorted array: 
3 9 10 27 38 43 82
bannerAds