请用C语言帮我写一段快排代码,并帮我讲解下实现逻辑
时间: 2024-10-29 20:24:22 浏览: 24
快速排序(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); // Index of smaller element
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[] = {9, 7, 5, 11, 12, 2, 14, 3, 10, 6};
int n = sizeof(arr) / sizeof(arr[0]);
printf("Original array: \n");
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
quickSort(arr, 0, n - 1);
printf("\nSorted array: \n");
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
return 0;
}
```
**实现逻辑:**
1. **选取基准**:通常选择数组的最后一个元素作为基准。
2. **分区过程**:从数组的第一个元素开始遍历,如果元素小于或等于基准,则将它与`i`位置上的元素交换,`i`表示比基准小的最大元素的索引。遍历结束后,基准所在的位置就是所有小于或等于它的元素的边界。
3. **递归**:对基准两侧(包括基准本身)的子数组递归地执行上述步骤,直到整个序列有序。
**运行这个程序后,你会看到原数组按升序排列的结果。**
阅读全文