怎么用c语言实现快速排序
时间: 2023-09-18 22:08:37 浏览: 77
以下是用C语言实现快速排序的示例代码:
```
#include <stdio.h>
// 交换两个数的值
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
// 快速排序
void quickSort(int arr[], int left, int right) {
if (left >= right) { // 递归终止条件
return;
}
int i = left, j = right, pivot = arr[left]; // 选择基准值为左端点
while (i < j) {
// 从右往左找第一个小于基准值的数
while (i < j && arr[j] >= pivot) {
j--;
}
if (i < j) {
swap(&arr[i], &arr[j]);
}
// 从左往右找第一个大于基准值的数
while (i < j && arr[i] <= pivot) {
i++;
}
if (i < j) {
swap(&arr[i], &arr[j]);
}
}
// 递归排序左右两个子数组
quickSort(arr, left, i - 1);
quickSort(arr, i + 1, right);
}
int main() {
int arr[] = {3, 1, 4, 1, 5, 9, 2, 6, 5, 4};
int n = sizeof(arr) / sizeof(int);
quickSort(arr, 0, n - 1);
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
该程序使用递归的方式实现了快速排序算法。其中,主要的算法步骤如下:
1. 选择一个基准值(可以是任意一个数,但一般选择左端点);
2. 将数组分为两部分,左边的数都小于等于基准值,右边的数都大于等于基准值;
3. 递归排序左右两个子数组。
在具体实现中,我们使用了两个指针i和j来分别从左右两端扫描数组,找到需要交换的数,并将它们交换。最后,递归地对左右两个子数组进行排序,直到递归终止。
阅读全文