请用【C++】帮我写一段快排代码,并帮我讲解下实现逻辑
时间: 2024-10-23 13:11:36 浏览: 20
当然可以,快速排序是一种常用的排序算法,基于分治策略,通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,然后分别对这两部分记录继续进行排序,直到整个序列有序。
以下是使用C++实现的快速排序代码:
```cpp
#include <iostream>
using namespace std;
// 交换函数
void swap(int* a, int* b) {
int t = *a;
*a = *b;
*b = t;
}
// 分割函数,采用Lomuto分区法
int partition(int arr[], int low, int high) {
int pivot = arr[high]; // 选择最右边的元素作为基准
int i = (low - 1); // 初始值小于0,用于找到第一个大于等于pivot的位置
for (int j = low; j <= high - 1; j++) {
if (arr[j] < pivot) {
i++; // 如果当前元素小于pivot,i指针右移一位
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i + 1], &arr[high]); // 将pivot放到正确位置
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); // 对右半部分递归排序
}
}
// 测试快速排序
int main() {
int data[] = {9, 7, 5, 11, 12, 2, 14, 3, 10};
int size = sizeof(data) / sizeof(data[0]);
cout << "Original array:\n";
for (int i = 0; i < size; i++)
cout << data[i] << " ";
quickSort(data, 0, size - 1);
cout << "\nSorted array using Quick Sort:\n";
for (int i = 0; i < size; i++)
cout << data[i] << " ";
return 0;
}
```
实现逻辑解释:
1. `quickSort` 函数是主入口点,它接收数组、低索引和高索引作为参数。
2. `partition` 函数是分割过程的核心,首先选择一个基准(通常是最后一个元素),然后遍历数组,将所有小于基准的元素移动到基准左边,最后将基准放到正确的位置(使其左侧元素都小于它,右侧元素都大于它)。
3. `quickSort` 根据`partition`的结果递归地调用自身,对左右两个子数组分别进行排序,直到整个数组有序。
4. 在`main`函数中,我们先创建一个示例数组,调用`quickSort`对其进行排序,然后打印排序后的结果。
阅读全文