关键词网站排名查询,沈阳网络seo公司,网站手机自动跳转,wordpress网上商城下面是一个更简洁、更容易理解的快速排序C实现。这个版本使用了更直观的方式选择基准值#xff0c;并通过单独的辅助函数简化了分区过程#xff1a;
#include iostream
#include vector
using namespace std;// 交换两个元素
void swap(int a, int实现。这个版本使用了更直观的方式选择基准值并通过单独的辅助函数简化了分区过程
#include iostream
#include vector
using namespace std;// 交换两个元素
void swap(int a, int b) {int temp a;a b;b temp;
}// 分区函数将数组分为两部分左边小于基准值右边大于基准值
int partition(vectorint arr, int left, int right) {// 选择中间元素作为基准值更直观的选择int pivot arr[(left right) / 2];int i left; // 左指针int j right; // 右指针while (true) {// 找到左边第一个大于等于基准值的元素while (arr[i] pivot) i;// 找到右边第一个小于等于基准值的元素while (arr[j] pivot) j--;// 如果指针交叉分区完成if (i j) return j;// 交换左右指针指向的元素swap(arr[i], arr[j]);i;j--;}
}// 快速排序主函数
void quickSort(vectorint arr, int left, int right) {if (left right) {// 分区并获取基准值位置int pivotIndex partition(arr, left, right);// 递归排序左右两部分quickSort(arr, left, pivotIndex);quickSort(arr, pivotIndex 1, right);}
}// 打印数组
void printArray(const vectorint arr) {for (int num : arr) {cout num ;}cout endl;
}int main() {vectorint arr {3, 6, 8, 10, 1, 2, 1};cout 排序前的数组: ;printArray(arr);quickSort(arr, 0, arr.size() - 1);cout 排序后的数组: ;printArray(arr);return 0;
}这个实现的特点
基准值选择使用中间元素作为基准值更容易理解和实现双指针法通过左右两个指针相向移动将数组分为两部分简洁的分区逻辑使用while(true)循环和指针交叉判断使分区过程更清晰递归调用清晰地将数组分为左右两部分进行递归排序
代码解释
partition函数选择中间元素作为基准值左右指针分别向中间移动将比基准值小的元素交换到左边比基准值大的元素交换到右边直到指针交叉。quickSort函数递归地对基准值左右两部分进行排序。main函数创建测试数组调用排序函数并输出结果。
这个版本的快速排序代码更适合初学者理解算法的核心思想同时保持了良好的性能特性。