1. 分别使用通用指针类型参数、 函数模板实现类属的选择排序函数。
时间: 2024-02-24 19:00:23 浏览: 38
使用通用指针类型参数实现类属的选择排序函数可以这样定义:
```c++
void selectionSort(void* base, size_t num, size_t size, int (*cmp)(const void*, const void*))
{
char* p = static_cast<char*>(base);
for (size_t i = 0; i < num - 1; ++i) {
size_t minIndex = i;
for (size_t j = i + 1; j < num; ++j) {
if (cmp(p + j * size, p + minIndex * size) < 0) {
minIndex = j;
}
}
if (minIndex != i) {
std::swap_ranges(p + i * size, p + (i + 1) * size, p + minIndex * size);
}
}
}
```
使用函数模板实现类属的选择排序函数可以这样定义:
```c++
template <typename T, typename Compare>
void selectionSort(T* base, size_t num, Compare cmp)
{
for (size_t i = 0; i < num - 1; ++i) {
size_t minIndex = i;
for (size_t j = i + 1; j < num; ++j) {
if (cmp(base[j], base[minIndex])) {
minIndex = j;
}
}
if (minIndex != i) {
std::swap(base[i], base[minIndex]);
}
}
}
```
其中,通用指针类型参数的选择排序函数需要传入一个比较函数指针 `cmp`,函数模板实现的选择排序函数则需要传入一个比较函数对象 `cmp`。两种实现方式各有特点,具体选择哪种实现方式应该根据具体的情况而定。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)