qsort不用
时间: 2025-06-18 12:13:02 浏览: 13
<think>我们被要求不使用qsort函数,那么我们可以讨论如何自己实现一个排序函数。这里以快速排序为例,因为快速排序是一种高效的排序算法。快速排序的基本思想是分治法:选取一个基准元素,将数组分为两部分,一部分比基准小,一部分比基准大,然后递归地对这两部分进行排序。下面是一个使用递归实现的快速排序函数,用于对整数数组进行排序。</think>### 不使用 `qsort` 的自定义排序实现
在 C++ 中,若需要避免使用 C 标准库的 `qsort` 函数,可通过以下两种方式实现自定义排序:
#### 1. **快速排序(递归实现)**
```cpp
#include <iostream>
#include <vector>
using namespace std;
void quickSort(vector<int>& arr, int left, int right) {
if (left >= right) return;
int pivot = arr[(left + right) / 2]; // 选择中间元素为基准
int i = left, j = right;
while (i <= j) {
while (arr[i] < pivot) i++;
while (arr[j] > pivot) j--;
if (i <= j) {
swap(arr[i], arr[j]);
i++;
j--;
}
}
// 递归处理子数组
quickSort(arr, left, j);
quickSort(arr, i, right);
}
int main() {
vector<int> data = {9, 7, 5, 11, 12, 2, 14};
quickSort(data, 0, data.size() - 1);
cout << "Sorted: ";
for (int num : data)
cout << num << " ";
// 输出: Sorted: 2 5 7 9 11 12 14
return 0;
}
```
#### 2. **使用 C++ STL `sort`(推荐方法)**
```cpp
#include <iostream>
#include <vector>
#include <algorithm> // 包含 sort 函数
using namespace std;
int main() {
vector<int> data = {9, 7, 5, 11, 12, 2, 14};
// 使用 STL sort(非 qsort)
sort(data.begin(), data.end());
cout << "Sorted: ";
for (int num : data)
cout << num << " ";
return 0;
}
```
### 关键区别说明
- **`qsort` vs `sort`**
`qsort` 是 C 标准库函数,需传递函数指针作为比较器,类型不安全:
```cpp
int compare(const void* a, const void* b) {
return (*(int*)a - *(int*)b);
}
qsort(arr, n, sizeof(int), compare);
```
- **STL `sort` 优势**
- 类型安全(通过模板实现)
- 效率更高(混合了快速排序、堆排序和插入排序)
- 支持迭代器(可排序容器任意区间)
### 为何避免 `qsort`
1. **类型不安全**:需手动处理 `void*` 指针转换
2. **性能较低**:函数指针调用阻碍编译器内联优化
3. **功能局限**:无法直接用于 C++ 复杂对象(需额外处理)
阅读全文
相关推荐


















