C++ 冒泡排序算法:查找数组极值并排序

本文将介绍如何使用 C++ 实现冒泡排序算法,并通过自定义函数查找数组中的最大值或最小值。

1. 算法原理

冒泡排序算法是一种简单的排序算法,它通过不断比较相邻元素,并将较大的元素交换到较小的元素后面,最终将数组排序。

2. 函数设计

我们设计一个函数 findExtremeAndSort,它接收一个整型数组、元素个数、冒泡方向和极值类型作为参数,并对数组进行排序。

void findExtremeAndSort(int arr[], int n, int direction, int extremeType) {
  // 循环遍历数组
  for (int i = 0; i < n - 1; i++) {
    // 比较相邻元素
    for (int j = 0; j < n - i - 1; j++) {
      // 根据方向和极值类型进行比较和交换
      if ((direction == 1 && extremeType == 1 && arr[j] > arr[j + 1]) || 
          (direction == 1 && extremeType == 2 && arr[j] < arr[j + 1]) || 
          (direction == 2 && extremeType == 1 && arr[j] < arr[j + 1]) || 
          (direction == 2 && extremeType == 2 && arr[j] > arr[j + 1])) {
        // 交换元素
        int temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
      }
    }
    // 打印每轮排序后的数组
    for (int k = 0; k < n; k++) {
      cout << arr[k] << ' ';
    }
    cout << endl;
  }
}

3. 主函数实现

在主函数中,我们首先输入整数 nn 个整数,然后输入冒泡方向和极值类型,最后调用 findExtremeAndSort 函数进行排序并打印排序过程。

int main() {
  int n, direction, extremeType;
  cin >> n;
  int arr[20];
  for (int i = 0; i < n; i++) {
    cin >> arr[i];
  }
  cin >> direction >> extremeType;
  // 调用函数进行排序
  findExtremeAndSort(arr, n, direction, extremeType);
  return 0;
}

4. 样例输入和输出

  • 样例输入 1
5
23 12 54 32 67
1 2
  • 样例输出 1
12 23 32 54 67 
12 23 32 54 67 
12 23 32 54 67 
12 23 32 54 67 
12 23 32 54 67 
  • 样例输入 2
5
23 12 54 32 67
2 1
  • 样例输出 2
67 54 32 23 12 
67 54 32 23 12 
67 54 32 23 12 
67 54 32 23 12 
67 54 32 23 12 

5. 代码说明

  • direction 表示冒泡方向:1 表示正向(从前向后),2 表示反向(从后向前)。
  • extremeType 表示极值类型:1 表示最大值,2 表示最小值。
  • 代码中使用嵌套循环进行比较和交换,外层循环控制排序轮数,内层循环控制比较的元素。
  • 代码中使用 if 语句判断元素是否需要交换,根据 directionextremeType 的不同取值进行不同的判断。
  • 代码中使用 cout 打印每轮排序后的数组。

6. 总结

本文介绍了使用 C++ 实现冒泡排序算法,并通过自定义函数查找数组中的最大值或最小值。通过代码示例、输入输出说明和样例演示,读者可以更好地理解冒泡排序算法的原理和应用。

注意:

  • 代码中的数组大小设置为 20,读者可以根据实际情况进行调整。
  • 代码中使用 cout 打印排序过程,读者可以根据实际需求进行修改。
  • 代码中使用 cin 获取用户输入,读者可以根据实际情况进行修改。
  • 代码仅供参考,读者可以根据实际需求进行修改和完善。

原文地址: https://www.cveoy.top/t/topic/nWpQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录