请举个例子排序函数指针
假设有一个整数数组 arr
,我们可以按照从大到小的顺序对其进行排序。下面是一个使用排序函数指针进行排序的例子:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool cmp(int a, int b) {
return a > b;
}
int main() {
vector<int> arr = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
sort(arr.begin(), arr.end(), cmp);
for (auto& x : arr) {
cout << x << " ";
}
cout << endl;
return 0;
}
在上面的例子中,我们定义了一个比较函数 cmp
,它的功能是比较两个整数的大小,返回值为 true
表示第一个整数比第二个整数大。在 main()
函数中,我们通过 sort
函数对 arr
进行排序,其中第三个参数为指向 cmp
函数的指针,表示按照 cmp
函数的规则对 arr
进行排序。最终输出的结果是 9 6 5 5 5 4 3 3 2 1 1
,满足从大到小的要求。
请举个例子排序函数对象的成员函数指针:
假设有一个类 Person
,其中有两个成员变量 name
和 age
,我们可以按照年龄从小到大对一组 Person
对象进行排序。下面是一个使用排序函数对象的成员函数指针进行排序的例子:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Person {
public:
string name;
int age;
Person(string n, int a) : name(n), age(a) {}
};
class Compare {
public:
bool operator()(const Person& p1, const Person& p2) const {
return p1.age < p2.age;
}
};
int main() {
vector<Person> people = {{"Alice", 25}, {"Bob", 30}, {"Charlie", 20}};
Compare c;
bool (Compare::*comp)(const Person&, const Person&) const = &Compare::operator();
sort(people.begin(), people.end(), c.*comp);
for (auto& p : people) {
cout << p.name << " " << p.age << endl;
}
return 0;
}
在上面的例子中,我们定义了一个比较函数对象 Compare
,其中 operator()
是比较两个 Person
对象的函数。在 main()
函数中,我们首先创建了一个 Compare
对象 c
,然后定义了一个成员函数指针 comp
,指向 Compare
类的 operator()
函数。最后,我们通过 c.*comp
的方式将成员函数指针传递给 sort
函数,从而实现了按照年龄从小到大对 people
进行排序。
如何使用归并排序算法对以下数组进行降序排列?数组内容未给出,请提供具体数值以便演示。
归并排序是一种分治算法,用于将数组分为两半,分别进行排序,然后再合并。对于降序排列,我们需要在合并过程中保证大元素先合并。以下是基本步骤:
分割:将数组一分为二,直到每个子数组只有一个元素。
合并:从左到右比较两个子数组的第一个元素,选择较大的放入新数组,并移动指向那个元素的指针。重复这个过程,直到其中一个子数组遍历完,然后将另一个子数组剩下的部分直接添加到结果数组。
这是一个递归的过程,需要编写代码实现:
def merge_sort_descending(arr):
if len(arr) <= 1:
return arr
mid = len(arr) // 2
left_half = arr[:mid]
right_half = arr[mid:]
left_half = merge_sort_descending(left_half)
right_half = merge_sort_descending(right_half)
return merge_descending(left_half, right_half)
def merge_descending(left, right):
merged = []
i, j = 0, 0
while i < len(left) and j < len(right):
if left[i] > right[j]:
merged.append(left[i])
i += 1
else:
merged.append(right[j])
j += 1
# 如果有剩余的元素,则直接添加到合并后的数组
merged.extend(left[i:])
merged.extend(right[j:])
return merged
你可以调用merge_sort_descending
函数并传入一个需要排序的数组,它会返回一个按照降序排列的新数组。
举个例子,如果输入数组是 [4, 2, 9, 6, 7, 1]
,经过处理后,它将变成 [9, 7, 6, 4, 2, 1]
。
相关推荐














