在c语言中如何进行快速排序
时间: 2024-11-15 12:27:01 浏览: 6
快速排序是一种高效的排序算法,它基于分治策略。在C语言中,快速排序的基本步骤如下:
1. **选择基准**:通常选择第一个元素作为基准值(pivot),但也可以随机选择或其他方式。
2. **分区操作**:
- 将数组分为两部分:一部分所有元素都小于基准值,另一部分所有元素都大于等于基准值。这个过程称为分区(partitioning)。
- 可以使用两个指针(一个从左开始,一个从右开始),移动它们直到找到满足条件的交换位置。
3. **递归调用**:对左右两部分分别进行同样的快速排序操作,直到每个子数组只有一个元素或为空。
4. **合并结果**:所有子数组排序完成后,将它们合并成一个有序数组。
以下是简单的快速排序C语言实现(使用Lomuto分区法):
```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);
}
}
// 测试函数
void printArray(int arr[], int size) {
int i;
for (i=0; i < size; i++)
printf("%d ", arr[i]);
printf("\n");
}
int main() {
int data[] = {9, 7, 5, 11, 12, 2, 14, 3};
int n = sizeof(data)/sizeof(data[0]);
quickSort(data, 0, n-1);
printf("Sorted array: \n");
printArray(data, n);
return 0;
}
```
阅读全文