21xrx.com
2025-04-28 12:53:21 Monday
文章检索 我的文章 写文章
C++ 冒泡排序递归实现
2023-07-12 11:54:58 深夜i     19     0
C++ 冒泡排序 递归实现

冒泡排序是一种简单的排序算法,其基本思想是通过相邻元素间的比较和交换操作,将待排序序列按照递增或递减的顺序逐一调整,直到整个序列有序为止。C++ 冒泡排序的递归实现也是一种比较常见的算法实现方式,下面我们来介绍一下其实现细节。

首先,我们需要定义一个递归函数 `bubble_sort`,其输入参数为待排序的数组、数组的长度以及当前的循环次数。在每一次递归中,我们都需要从数组的尾部开始遍历,将相邻元素间的较大者向上冒泡,直到循环次数为止。

具体而言,我们可以使用两个嵌套的 for 循环来实现这一过程,代码如下所示:

void bubble_sort(int arr[], int n, int i) {
  if (i == n) return; //如果已经循环n次,则退出递归
  for (int j = n - 1; j > i; j--) {
    if (arr[j] < arr[j - 1]) {
      //交换相邻元素
      int tmp = arr[j];
      arr[j] = arr[j - 1];
      arr[j - 1] = tmp;
    }
  }
  bubble_sort(arr, n, i + 1); //递归调用函数
}

接着,我们可以在主函数中调用该递归函数来完成整个排序过程。具体而言,我们可以先读入待排序的数组,并指定排序方式(递增或递减),再调用 `bubble_sort` 函数并输出排序结果。完整的代码示例如下:

#include <iostream>
using namespace std;
void bubble_sort(int arr[], int n, int i) {
  if (i == n) return;
  for (int j = n - 1; j > i; j--) {
    if (arr[j] < arr[j - 1]) {
      //交换相邻元素
      int tmp = arr[j];
      arr[j] = arr[j - 1];
      arr[j - 1] = tmp;
    }
  }
  bubble_sort(arr, n, i + 1);
}
int main() {
  int n, arr[100], flag;
  cout << "请输入数组长度:";
  cin >> n;
  cout << "请输入待排序的数组:";
  for (int i = 0; i < n; i++) {
    cin >> arr[i];
  }
  cout << "请选择排序方式(1代表递增,0代表递减):";
  cin >> flag;
  bubble_sort(arr, n, 0);
  if (flag) {
    cout << "排序后的结果为:";
    for (int i = 0; i < n; i++) {
      cout << arr[i] << " ";
    }
  } else {
    cout << "排序后的结果为:";
    for (int i = n - 1; i >= 0; i--) {
      cout << arr[i] << " ";
    }
  }
  return 0;
}

需要注意的是,在递归函数中,如果已经循环了整个数组,则需要立即返回,否则会陷入死循环。此外,在主函数中,由于需要根据用户输入的排序方式输出结果,因此我们使用了一个 flag 变量来判断输出顺序。

综上所述,C++ 冒泡排序的递归实现是一种比较简单易用的算法实现方式,可以帮助我们更好地理解递归函数的编写与调用。

  
  

评论区

请求出错了