ホームページ  >  記事  >  バックエンド開発  >  ソートアルゴリズムにおけるC++の再帰関数の応用?

ソートアルゴリズムにおけるC++の再帰関数の応用?

WBOY
WBOYオリジナル
2024-04-17 11:06:02332ブラウズ

C のソート アルゴリズムにおける再帰関数の適用 再帰関数によって実装された挿入ソートおよびマージ ソート アルゴリズムは、複雑な問題をより小さなサブ問題に分解し、再帰呼び出しを通じてそれらを効率的に解決できます。挿入ソート: 要素を 1 つずつ挿入して配列をソートします。マージソート: 分割統治し、配列を分割してサブ配列を再帰的にソートし、最後にソートされたサブ配列をマージします。

C++ 递归函数在排序算法中的应用?

#C 並べ替えアルゴリズムにおける再帰関数の適用

再帰関数は、そのシンプルさと効率性のため、プログラマの間で非常に人気があります。並べ替えアルゴリズムでは、再帰関数は複雑な問題を簡単に処理し、効率的な解決策を提供できます。この記事では、並べ替えアルゴリズムにおける C の再帰関数の応用を検討し、それらがどのように機能するかを例とともに説明します。

挿入ソート

挿入ソートは、隣接する要素を比較し、それらを順番に挿入することによって配列をソートする単純なソート アルゴリズムです。再帰関数を使用して、効率的な挿入ソート アルゴリズムを実装できます。

// 递归插入排序函数
void insertionSort(int arr[], int n) {
  // 基线条件:数组只有一个元素时,不需要排序
  if (n <= 1) {
    return;
  }

  // 递归调用:对子数组执行插入排序
  insertionSort(arr, n - 1);

  // 插入最后一个元素到排序好的子数组中
  int last = arr[n - 1];
  int j = n - 2;

  while (j >= 0 && arr[j] > last) {
    arr[j + 1] = arr[j];
    j--;
  }

  arr[j + 1] = last;
}

マージ ソート

マージ ソートは、配列を分割して分割する分割統治型のソート アルゴリズムです。より小さいサブ配列を分割し、それらをソートされた配列にマージする前に再帰的にソートします。以下は、再帰を使用して実装されたマージ ソート アルゴリズムです。

// 递归归并排序函数
void mergeSort(int arr[], int l, int r) {
  // 基线条件:数组只有一个元素时,直接返回
  if (l >= r) {
    return;
  }

  // 计算数组中点
  int m = l + (r - l) / 2;

  // 递归调用:对数组的左半部分和右半部分执行归并排序
  mergeSort(arr, l, m);
  mergeSort(arr, m + 1, r);

  // 合并两个排序好的子数组
  merge(arr, l, m, r);
}

// 合并两个排序好的子数组的辅助函数
void merge(int arr[], int l, int m, int r) {
  // 创建一个临时数组,用于合并两个子数组
  int temp[r - l + 1];

  int i = l;
  int j = m + 1;
  int k = 0;

  // 循环比较两个子数组的元素,将较小的元素添加到临时数组中
  while (i <= m && j <= r) {
    if (arr[i] <= arr[j]) {
      temp[k++] = arr[i++];
    } else {
      temp[k++] = arr[j++];
    }
  }

  // 将剩余的元素添加到临时数组中
  while (i <= m) {
    temp[k++] = arr[i++];
  }

  while (j <= r) {
    temp[k++] = arr[j++];
  }

  // 将临时数组复制回原始数组
  for (int i = l; i <= r; i++) {
    arr[i] = temp[i - l];
  }
}

実用的なケース

ソート アルゴリズムでの再帰関数の適用を示すために、次の例を考えてみましょう。 ##
int main() {
  // 创建一个无序数组
  int arr[] = {64, 34, 25, 12, 22, 11, 90};
  int n = sizeof(arr) / sizeof(arr[0]);

  // 使用插入排序对数组进行排序
  insertionSort(arr, n);

  // 打印排序后的数组
  for (int i = 0; i < n; i++) {
    cout << arr[i] << " ";
  }
  cout << endl;

  // 使用归并排序对数组进行排序
  mergeSort(arr, 0, n - 1);

  // 打印排序后的数组
  for (int i = 0; i < n; i++) {
    cout << arr[i] << " ";
  }
  cout << endl;

  return 0;
}

出力:

11 12 22 25 34 64 90 
11 12 22 25 34 64 90

出力に示されているように、再帰関数は、挿入ソート アルゴリズムとマージ ソート アルゴリズムを使用して配列をソートするために使用されています。

以上がソートアルゴリズムにおけるC++の再帰関数の応用?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。