写一段快速排序的c++代码
时间: 2023-08-31 09:32:41 浏览: 118
sort_algorithm_快速排序C++_
### 回答1:
// 快速排序算法的C语言实现
void QuickSort(int array[], int left, int right)
{
int i, j, t, temp;
if (left > right)
return;
temp = array[left]; //temp中存的就是基准数
i = left;
j = right;
while (i != j)
{
//顺序很重要,要先从右边开始找
while (array[j] >= temp && i < j)
j--;
//再找右边的
while (array[i] <= temp && i < j)
i++;
//交换两个数在数组中的位置
if (i < j)
{
t = array[i];
array[i] = array[j];
array[j] = t;
}
}
//最终将基准数归位
array[left] = array[i];
array[i] = temp;
QuickSort(array, left, i - 1);//继续处理左边的,这里是一个递归的过程
QuickSort(array, i + 1, right);//继续处理右边的 ,这里是一个递归的过程
}
### 回答2:
快速排序(Quick Sort)是一种常用的排序算法,使用分治的思想,通过递归地将数组分成较小和较大的两个子序列,然后分别对两个子序列进行排序,最后拼接得到有序的数组。
下面是一段用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); // 比pivot小的元素的索引
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 pi = partition(arr, low, high); // 划分数组
quickSort(arr, low, pi - 1); // 对划分元素的左侧子数组应用快速排序
quickSort(arr, pi + 1, high); // 对划分元素的右侧子数组应用快速排序
}
}
int main() {
int arr[] = { 10, 7, 8, 9, 1, 5 };
int n = sizeof(arr) / sizeof(arr[0]);
quickSort(arr, 0, n - 1);
printf("排序后的数组:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
上述代码中,swap函数用于交换数组中两个元素的位置,partition函数用于划分数组,根据划分元素pivot的大小将元素放到划分点的左侧或右侧。quickSort函数是递归调用,对左侧和右侧的子数组进行快速排序。最后,在main函数中调用quickSort函数对数组进行排序,并输出排序后的结果。快速排序的时间复杂度为O(nlogn)。
### 回答3:
快速排序是一种常用的排序算法,其基本思想是通过选择一个枢轴元素,将数组分割成两个子数组,使得左子数组的元素都小于等于枢轴元素,右子数组的元素都大于等于枢轴元素,然后递归地对子数组进行排序。下面是一个使用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 pi = partition(arr, low, high);
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
}
int main() {
int arr[] = {10, 7, 8, 9, 1, 5};
int n = sizeof(arr) / sizeof(arr[0]);
quickSort(arr, 0, n - 1);
printf("排序后的数组:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
以上代码中,`swap`函数用于交换两个元素的位置,`partition`函数将数组分割成两个子数组,并返回枢轴元素的位置,`quickSort`函数用于递归地对子数组进行排序。在`main`函数中,我们给定了一个待排序的数组,调用`quickSort`函数后输出排序后的结果。
阅读全文