冒泡算法c++ 使用模板进行份文件编写实现升序降序代码
时间: 2024-04-09 18:33:20 浏览: 126
当使用模板进行冒泡排序算法的分文件编写时,我们可以在代码中添加一个参数来指定排序的顺序(升序或降序)。以下是示例代码:
**main.cpp:**
```cpp
#include <iostream>
#include "bubble_sort.h"
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr) / sizeof(arr[0]);
bubbleSort<int, true>(arr, n); // 升序排序
std::cout << "升序排序后的数组:\n";
for (int i = 0; i < n; i++) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
bubbleSort<int, false>(arr, n); // 降序排序
std::cout << "降序排序后的数组:\n";
for (int i = 0; i < n; i++) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
return 0;
}
```
**bubble_sort.h:**
```cpp
#ifndef BUBBLE_SORT_H
#define BUBBLE_SORT_H
template<typename T, bool ascending>
void bubbleSort(T arr[], int n);
#endif
```
**bubble_sort.cpp:**
```cpp
#include "bubble_sort.h"
template<typename T, bool ascending>
void bubbleSort(T arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if ((arr[j] > arr[j + 1] && ascending) || (arr[j] < arr[j + 1] && !ascending)) {
// 交换arr[j]和arr[j+1]
T temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
// 显式实例化模板函数,以便在链接时生成代码
template void bubbleSort<int, true>(int arr[], int n);
template void bubbleSort<int, false>(int arr[], int n);
```
在这个例子中,我们修改了 `bubbleSort` 函数的定义,添加了一个模板参数 `ascending`,它用来指定排序的顺序,`true` 表示升序,`false` 表示降序。
在 `main.cpp` 文件中,我们调用了两次 `bubbleSort` 函数,一次使用 `true` 参数进行升序排序,一次使用 `false` 参数进行降序排序。
需要注意的是,在 `bubble_sort.cpp` 文件的末尾,我们使用了显式实例化模板函数的方式,以便在链接时生成代码。
编译和运行这个程序与之前相同,确保"main.cpp"、"bubble_sort.h"和"bubble_sort.cpp"这三个文件处于同一个目录下,并使用C++编译器进行编译。
阅读全文