快速排序算法c++(快速排序算法C语言)

## 快速排序算法 C++ 实现### 简介快速排序(Quick Sort)是一种高效的排序算法,其基本思想是

分治法

。它通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。### 算法步骤1.

选择基准值(pivot):

从待排序的数组中选择一个元素作为基准值,通常选择第一个元素或最后一个元素。 2.

分区操作:

将数组中小于基准值的元素放到基准值的左边,大于基准值的元素放到基准值的右边。 3.

递归排序:

对基准值左侧和右侧的子数组分别进行递归排序,直到子数组的长度为 1 或 0。### 代码实现```c++ #include using namespace std;// 交换两个元素的值 void swap(int

a, int

b) {int temp =

a;

a =

b;

b = temp; }// 分区操作 int partition(int arr[], int low, int high) {// 选择最后一个元素作为基准值int pivot = arr[high]; int i = (low - 1); // 小于基准值的元素的索引for (int j = low; j <= high - 1; j++) {// 如果当前元素小于等于基准值if (arr[j] <= pivot) {i++; // 小于基准值的元素的索引加一swap(&arr[i], &arr[j]); // 交换当前元素和arr[i]}}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);} }// 打印数组 void printArray(int arr[], int size) {for (int i = 0; i < size; i++) {cout << arr[i] << " ";}cout << endl; }int main() {int arr[] = {10, 7, 8, 9, 1, 5};int n = sizeof(arr) / sizeof(arr[0]);cout << "排序前的数组: \n";printArray(arr, n);quickSort(arr, 0, n - 1);cout << "排序后的数组: \n";printArray(arr, n);return 0; } ```### 内容详细说明1.

`swap()` 函数:

用于交换数组中两个元素的值。 2.

`partition()` 函数:

- 选择最后一个元素作为基准值 `pivot`。- 使用 `i` 来追踪小于等于 `pivot` 的元素的索引,初始值为 `low - 1`。- 从 `low` 到 `high - 1` 遍历数组:- 如果当前元素 `arr[j]` 小于等于 `pivot`,则将 `i` 加 1,并将 `arr[i]` 与 `arr[j]` 交换,确保小于等于 `pivot` 的元素都放在 `pivot` 的左侧。- 最后将 `pivot` (即 `arr[high]`) 与 `arr[i + 1]` 交换,将 `pivot` 放到正确的位置,使得 `pivot` 左侧的元素都小于等于它,右侧的元素都大于它。- 返回 `pivot` 的索引 `i + 1`。 3.

`quickSort()` 函数:

- 递归函数,接受数组、起始索引 `low` 和结束索引 `high` 作为参数。- 如果 `low` 小于 `high`,说明数组至少包含两个元素,需要进行排序:- 调用 `partition()` 函数对数组进行分区操作,并将返回值(即 `pivot` 的索引)赋给 `pi`。- 递归调用 `quickSort()` 函数对 `pivot` 左侧和右侧的子数组进行排序。 4.

`printArray()` 函数:

用于打印数组。 5.

`main()` 函数:

- 创建一个示例数组 `arr`。- 打印排序前的数组。- 调用 `quickSort()` 函数对数组进行排序。- 打印排序后的数组。### 总结快速排序是一种高效的排序算法,平均时间复杂度为 O(n log n)。 然而,在最坏情况下(例如,数组已经排好序或逆序),时间复杂度会退化到 O(n^2)。 尽管如此,由于其平均性能优越,快速排序在实践中得到了广泛的应用。

快速排序算法 C++ 实现

简介快速排序(Quick Sort)是一种高效的排序算法,其基本思想是**分治法**。它通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

算法步骤1. **选择基准值(pivot):** 从待排序的数组中选择一个元素作为基准值,通常选择第一个元素或最后一个元素。 2. **分区操作:** 将数组中小于基准值的元素放到基准值的左边,大于基准值的元素放到基准值的右边。 3. **递归排序:** 对基准值左侧和右侧的子数组分别进行递归排序,直到子数组的长度为 1 或 0。

代码实现```c++

include using namespace std;// 交换两个元素的值 void swap(int* a, int* b) {int temp = *a;*a = *b;*b = temp; }// 分区操作 int partition(int arr[], int low, int high) {// 选择最后一个元素作为基准值int pivot = arr[high]; int i = (low - 1); // 小于基准值的元素的索引for (int j = low; j <= high - 1; j++) {// 如果当前元素小于等于基准值if (arr[j] <= pivot) {i++; // 小于基准值的元素的索引加一swap(&arr[i], &arr[j]); // 交换当前元素和arr[i]}}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);} }// 打印数组 void printArray(int arr[], int size) {for (int i = 0; i < size; i++) {cout << arr[i] << " ";}cout << endl; }int main() {int arr[] = {10, 7, 8, 9, 1, 5};int n = sizeof(arr) / sizeof(arr[0]);cout << "排序前的数组: \n";printArray(arr, n);quickSort(arr, 0, n - 1);cout << "排序后的数组: \n";printArray(arr, n);return 0; } ```

内容详细说明1. **`swap()` 函数:** 用于交换数组中两个元素的值。 2. **`partition()` 函数:** - 选择最后一个元素作为基准值 `pivot`。- 使用 `i` 来追踪小于等于 `pivot` 的元素的索引,初始值为 `low - 1`。- 从 `low` 到 `high - 1` 遍历数组:- 如果当前元素 `arr[j]` 小于等于 `pivot`,则将 `i` 加 1,并将 `arr[i]` 与 `arr[j]` 交换,确保小于等于 `pivot` 的元素都放在 `pivot` 的左侧。- 最后将 `pivot` (即 `arr[high]`) 与 `arr[i + 1]` 交换,将 `pivot` 放到正确的位置,使得 `pivot` 左侧的元素都小于等于它,右侧的元素都大于它。- 返回 `pivot` 的索引 `i + 1`。 3. **`quickSort()` 函数:** - 递归函数,接受数组、起始索引 `low` 和结束索引 `high` 作为参数。- 如果 `low` 小于 `high`,说明数组至少包含两个元素,需要进行排序:- 调用 `partition()` 函数对数组进行分区操作,并将返回值(即 `pivot` 的索引)赋给 `pi`。- 递归调用 `quickSort()` 函数对 `pivot` 左侧和右侧的子数组进行排序。 4. **`printArray()` 函数:** 用于打印数组。 5. **`main()` 函数:** - 创建一个示例数组 `arr`。- 打印排序前的数组。- 调用 `quickSort()` 函数对数组进行排序。- 打印排序后的数组。

总结快速排序是一种高效的排序算法,平均时间复杂度为 O(n log n)。 然而,在最坏情况下(例如,数组已经排好序或逆序),时间复杂度会退化到 O(n^2)。 尽管如此,由于其平均性能优越,快速排序在实践中得到了广泛的应用。

标签列表