C 语言中的快速排序算法250


快速排序是一种高效的排序算法,它通过递归地将一个数组划分为较小和较大的子数组(称之为“分区”)来工作。这种方法使用了一个称为“枢纽”的元素,该元素将数组划分为两部分:小于枢纽的元素的子数组,以及大于或等于枢纽的元素的子数组。

快速排序的伪代码如下:```
quicksort(array, left, right) {
if (left < right) {
pivot = partition(array, left, right)
quicksort(array, left, pivot - 1)
quicksort(array, pivot + 1, right)
}
}
partition(array, left, right) {
pivot = array[right]
i = left - 1
for (j = left to right - 1) {
if (array[j] < pivot) {
swap(array[i + 1], array[j])
i++
}
}
swap(array[i + 1], array[right])
return i + 1
}
```

在 C 语言中实现快速排序算法:```c
#include
// Partition the array array[left...right] around the pivot element
int partition(int array[], int left, int right) {
int pivot = array[right];
int i = left - 1;
for (int j = left; j < right; j++) {
if (array[j] < pivot) {
i++;
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
int temp = array[i + 1];
array[i + 1] = array[right];
array[right] = temp;
return i + 1;
}
// Recursively sort the array array[left...right]
void quicksort(int array[], int left, int right) {
if (left < right) {
int pivot_index = partition(array, left, right);
quicksort(array, left, pivot_index - 1);
quicksort(array, pivot_index + 1, right);
}
}
// Print the sorted array
void printArray(int array[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", array[i]);
}
printf("");
}
int main() {
int array[] = {10, 7, 8, 9, 1, 5};
int size = sizeof(array) / sizeof(array[0]);
quicksort(array, 0, size - 1);
printArray(array, size);
return 0;
}
```

时间复杂度:快速排序的时间复杂度在平均情况下为 O(n log n),在最坏情况下为 O(n^2)。

空间复杂度:快速排序的空间复杂度为 O(log n) 由于递归调用。

优点:* 快速且高效,在平均情况下达到 O(n log n) 的复杂度。
* 不需要额外的存储空间,因为它就地排序。
* 适用于大量数据集。

缺点:* 最坏情况下时间复杂度为 O(n^2)。
* 对于几乎排好序或反向排好序的数组性能较差。

2024-11-28


上一篇:用 C 语言获取宿舍人员姓名

下一篇:C 语言库函数:全面指南