快速排序算法简介:
快速排序(Quick Sort)是一种高效的排序算法,采用分治法策略。它的基本思想是:
1. 从数列中挑出一个元素作为"基准"
2. 重新排序数列,所有比基准值小的元素放在基准前面,所有比基准值大的元素放在基准后面
3. 递归地对小于基准值的子数列和大于基准值的子数列进行排序
平均时间复杂度为O(n log n),最坏情况下为O(n²),但通过优化可以避免最坏情况。
代码实现:
C++:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int partition(vector<int>& arr, int low, int high) {
int pivot = arr[high];
int i = low - 1;
for (int j = low; j < high; j++) {
if (arr[j] < pivot) {
i++;
swap(arr[i], arr[j]);
}
}
swap(arr[i + 1], arr[high]);
return i + 1;
}
void quickSort(vector<int>& arr, int low, int high) {
if (low < high) {
int pi = partition(arr, low, high);
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
}
void quickSort(vector<int>& arr) {
quickSort(arr, 0, arr.size() - 1);
}
C语言:
#include <stdio.h>
void swap(int* a, int* b) {
int t = *a;
*a = *b;
*b = t;
}
int partition(int arr[], int low, int high) {
int pivot = arr[high];
int i = low - 1;
for (int j = low; j < high; j++) {
if (arr[j] < pivot) {
i++;
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i + 1], &arr[high]);
return i + 1;
}
void quickSort(int arr[], int low, int high) {
if (low < high) {
int pi = partition(arr, low, high);
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
}
样例截图:
思考与总结:
两种语言实现的优势比较
1. C++实现优势:
使用vector容器,更安全且方便
内置swap函数,代码更简洁
支持函数重载,提供更友好的接口
模板编程可轻松扩展为泛型实现
2. C语言实现优势:
更底层,运行效率可能更高
不依赖标准库以外的功能,可移植性更强
更适合嵌入式系统等资源受限环境
更直观地展示算法本质
分治思想将大问题分解为小问题,各个击破,这种思想在解决复杂问题时非常有效。快速排序的平均性能很好,但最坏情况性能较差,这提醒我们在设计系统时要考虑平均情况和最坏情况的平衡。 快速排序的性能很大程度上取决于基准的选择,这类似于生活中"找准关键点"的重要性。递归实现简洁优雅,展示了自相似问题的解决模式。快速排序是原地排序(除了递归栈),这提醒我们在资源利用上要尽可能高效。