21xrx.com
2024-12-22 15:49:24 Sunday
登录
文章检索 我的文章 写文章
C++ 冒泡排序递归实现
2023-07-12 11:54:58 深夜i     --     --
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++ 冒泡排序的递归实现是一种比较简单易用的算法实现方式,可以帮助我们更好地理解递归函数的编写与调用。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复