如何编写一个可以实现数组按升序(小到大)和降序(大到小)排列的函数?
时间: 2024-10-21 21:05:32 浏览: 15
在 C++ 中,你可以使用两种常见的算法来实现这个功能:快速排序(Quicksort)或选择排序(Selection Sort)。这里我会演示一种简单的方法,使用冒泡排序算法,因为它直观易懂,并且对于小规模的数据集效率也还不错。
```cpp
#include <iostream>
// 定义一个通用的比较函数,用于升序和降序操作
bool compare(int a, int b, bool ascending = true) {
return ascending ? a < b : a > b; // 默认为升序
}
// 冒泡排序函数,支持升序和降序排列
void sortArray(int arr[], int size, bool order = true) {
for (size_t i = 0; i < size - 1; ++i) {
for (size_t j = 0; j < size - 1 - i; ++j) {
if (compare(arr[j], arr[j + 1], order)) {
// 交换元素
std::swap(arr[j], arr[j + 1]);
}
}
}
}
int main() {
int arr[] = {5, 2, 8, 1, 9};
int n = sizeof(arr) / sizeof(arr[0]);
std::cout << "Ascending order: ";
sortArray(arr, n);
for (int i : arr) {
std::cout << i << " ";
}
std::cout << "\nDescending order: ";
sortArray(arr, n, false); // 将order参数设为false进行降序排列
for (int i : arr) {
std::cout << i << " ";
}
return 0;
}
```
在这个例子中,`sortArray` 函数接受一个整数数组、它的大小以及一个布尔值 `order` 表示排序顺序。如果 `order` 为真(默认),则按照升序排列;否则按照降序排列。我们通过传递不同的 `order` 参数调用同一个函数就可以实现两种排序需求。
阅读全文