帮我写个c++的快速排序
时间: 2023-08-31 08:33:15 浏览: 143
### 回答1:
好的,下面是 C 语言的快速排序代码:
```
#include <stdio.h>
void quicksort(int arr[], int left, int right) {
int i = left, j = right;
int tmp;
int pivot = arr[(left + right) / 2];
while (i <= j) {
while (arr[i] < pivot) {
i++;
}
while (arr[j] > pivot) {
j--;
}
if (i <= j) {
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
i++;
j--;
}
}
if (left < j) {
quicksort(arr, left, j);
}
if (i < right) {
quicksort(arr, i, right);
}
}
int main() {
int arr[] = {5, 2, 8, 4, 9, 3, 1, 6, 7};
int n = sizeof(arr) / sizeof(arr[]);
quicksort(arr, , n - 1);
for (int i = ; i < n; i++) {
printf("%d ", arr[i]);
}
return ;
}
```
这是一个基本的快速排序算法,可以对整数数组进行排序。
### 回答2:
快速排序是一种经典的排序算法,其基本思想是通过选择一个元素作为基准值,将序列划分为左右两个子序列,使得左边的元素都小于等于基准值,右边的元素都大于等于基准值。然后分别对左右两个子序列递归地进行快速排序,最终得到有序序列。
以下是一个用C语言实现的快速排序算法:
```c
#include <stdio.h>
// 函数声明
void quickSort(int arr[], int low, int high);
int partition(int arr[], int low, int high);
int main() {
int arr[] = {55, 4, 87, 100, 1, 23, 68, 9};
int n = sizeof(arr) / sizeof(arr[0]);
printf("原始序列:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
quickSort(arr, 0, n - 1);
printf("排序后序列:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
// 快速排序
void quickSort(int arr[], int low, int high) {
if (low < high) {
int pivot = partition(arr, low, high); // 划分
quickSort(arr, low, pivot - 1); // 递归排序左子序列
quickSort(arr, pivot + 1, high); // 递归排序右子序列
}
}
// 划分函数
int partition(int arr[], int low, int high) {
int pivot = arr[low]; // 选择第一个元素作为基准值
while (low < high) {
while (low < high && arr[high] >= pivot) {
high--;
}
arr[low] = arr[high];
while (low < high && arr[low] <= pivot) {
low++;
}
arr[high] = arr[low];
}
arr[low] = pivot;
return low;
}
```
这个示例代码会对一个给定的整数数组进行快速排序,并打印排序前和排序后的序列。你可以根据需要修改输入数组和输出方式。记得引入<stdlib.h>头文件。
### 回答3:
快速排序(Quick Sort)是一种经典的排序算法,使用分治法(Divide and Conquer)的思想。
以下是一个使用C语言实现的快速排序算法:
```c
// 快速排序函数
void quickSort(int arr[], int low, int high) {
if (low < high) {
// 将数组分割为两个子数组,并获取分割点的索引
int pivotIndex = partition(arr, low, high);
// 递归对子数组进行排序
quickSort(arr, low, pivotIndex - 1);
quickSort(arr, pivotIndex + 1, high);
}
}
// 分割函数,用于获取分割点的索引
int partition(int arr[], int low, int high) {
int pivot = arr[low]; // 选择第一个元素作为基准值
int left = low + 1; // 左指针
int right = high; // 右指针
// 循环查找交换位置,并确保左边的元素都比基准值小,右边的元素都比基准值大
while (left <= right) {
// 查找左边第一个比基准值大的元素
while (left <= right && arr[left] <= pivot) {
left++;
}
// 查找右边第一个比基准值小的元素
while (left <= right && arr[right] > pivot) {
right--;
}
// 如果左指针和右指针还没有相遇,则交换两个元素的位置
if (left < right) {
swap(&arr[left], &arr[right]);
}
}
// 将基准值放到合适的位置,左边的元素比它小,右边的元素比它大
swap(&arr[low], &arr[right]);
// 返回分割点的索引
return right;
}
// 交换函数,用于交换两个元素的值
void swap(int *a, int *b) {
int tmp = *a;
*a = *b;
*b = tmp;
}
```
你可以使用以上代码来实现快速排序算法,其中主要的函数是`quickSort`和`partition`。在`quickSort`函数中,我们通过调用`partition`函数将数组分割为两个子数组,并递归对子数组进行排序。`partition`函数用于选择一个基准值,并通过交换元素的方式将数组分割为两部分,确保左边的元素都小于基准值,右边的元素都大于基准值。最后返回分割点的索引,用于划分子数组。
阅读全文
相关推荐
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![png](https://img-home.csdnimg.cn/images/20210720083516.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)