使用C语言实现快速排序法
时间: 2023-07-05 08:25:06 浏览: 102
好的,以下是使用 C 语言实现快速排序算法的代码:
```c
#include <stdio.h>
#include <stdlib.h>
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
void quick_sort(int arr[], int start, int end) {
if (start >= end) {
return;
}
int pivot = arr[end];
int i = start - 1;
for (int j = start; j <= end - 1; j++) {
if (arr[j] < pivot) {
i++;
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i+1], &arr[end]);
quick_sort(arr, start, i);
quick_sort(arr, i+2, end);
}
int main() {
int arr[] = {10, 7, 8, 9, 1, 5};
int n = sizeof(arr) / sizeof(arr[0]);
quick_sort(arr, 0, n-1);
printf("Sorted Array: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
在该实现中,我们选取数组中的一个元素作为中心点(pivot),然后将数组分为小于 pivot 和大于 pivot 的两个部分。接着,我们对这两个部分分别递归地进行上述操作,直到所有部分都只有一个元素。
在递归过程中,我们使用 i 变量来记录当前小于 pivot 的元素的最右侧位置。在遍历数组时,如果遇到小于 pivot 的元素,则将其与 i+1 位置的元素进行交换,并将 i 向右移动一个位置。最后,我们将 pivot 放在 i+1 的位置上,并递归地对小于 pivot 和大于 pivot 的两部分继续进行快速排序。
该实现的时间复杂度为 O(nlogn),空间复杂度为 O(logn)。
阅读全文