用c++写一段快速排序
时间: 2023-08-31 12:26:26 浏览: 271
### 回答1:
我可以用以下代码来实现快速排序:int quick_sort(int arr[], int left, int right)
{
int i = left, j = right;
int pivot = arr[(left + right) / 2];
int temp;
while (i <= j)
{
while (arr[i] < pivot)
i++;
while (arr[j] > pivot)
j--;
if (i <= j)
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}
if (left < j)
quick_sort(arr, left, j);
if (i < right)
quick_sort(arr, i, right);
return 0;
}
### 回答2:
快速排序是一种常用的排序算法,其基本思想是通过分治的方式将原始数组划分为较小的子数组,然后对这些子数组进行排序,最终将它们合并成有序的结果。
以下是用C语言实现快速排序的一个例子:
```c
#include <stdio.h>
// 交换两个元素的值
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]);
}
}
swap(&arr[i + 1], &arr[high]); // 将基准值放置到正确的位置
return (i + 1);
}
// 快速排序函数
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);
}
}
// 打印数组元素
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int arr[] = {7, 2, 1, 6, 8, 5, 3, 4};
int size = sizeof(arr) / sizeof(arr[0]);
printf("原始数组:");
printArray(arr, size);
quickSort(arr, 0, size - 1);
printf("排序后的数组:");
printArray(arr, size);
return 0;
}
```
以上是一个常见的快速排序的实现。在主函数中,我们定义一个数组并将其打印出来,然后调用`quickSort`函数对数组进行排序,并再次打印排序后的数组。`partition`函数用于划分数组并返回基准值的索引,`swap`函数用于交换两个元素的值。
运行以上代码,将会输出原始数组和排序后的数组。
### 回答3:
快速排序是一种常用的排序算法,采用分治策略将一个大问题转化为多个小问题来解决。它的基本思想是通过一趟排序将待排序序列分割成独立的两部分,其中一部分的元素均小于等于另一部分的元素,然后再对这两部分分别进行快速排序,以达到整个序列有序的目的。
下面是用C语言实现的快速排序算法:
```
#include<stdio.h>
void quickSort(int arr[], int left, int right) {
int i = left, j = right;
int pivot = arr[(left + right) / 2]; // 选择中间元素作为枢纽元
// 分割数组
while (i <= j) {
while (arr[i] < pivot)
i++;
while (arr[j] > pivot)
j--;
if (i <= j) {
// 交换左右元素并移动指针
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}
// 递归地对左右两部分进行排序
if (left < j)
quickSort(arr, left, j);
if (i < right)
quickSort(arr, i, right);
}
int main() {
int arr[] = { 6, 2, 8, 1, 5, 9, 4, 3, 7 };
int length = sizeof(arr) / sizeof(arr[0]);
quickSort(arr, 0, length - 1);
printf("快速排序结果:");
for (int i = 0; i < length; i++)
printf("%d ", arr[i]);
return 0;
}
```
以上是一个基本的快速排序算法的C语言实现。该算法的时间复杂度为O(nlogn),并且是一种原地排序算法,不需要额外的空间。通过运行该程序,可以看到输出结果为按照从小到大的顺序排列的数组。
阅读全文