编写快速排序函数,实现对给定的数组 vec 从下标 start 到 finish 之间的元素进行排序。用c语言
时间: 2024-02-05 16:11:01 浏览: 96
以下是快速排序的C语言代码实现:
```c
#include <stdio.h>
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
int partition(int arr[], int start, int finish) {
int pivot = arr[finish];
int i = (start - 1);
for (int j = start; j <= finish - 1; j++) {
if (arr[j] < pivot) {
i++;
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i + 1], &arr[finish]);
return (i + 1);
}
void quicksort(int arr[], int start, int finish) {
if (start < finish) {
int p = partition(arr, start, finish);
quicksort(arr, start, p - 1);
quicksort(arr, p + 1, finish);
}
}
int main() {
int vec[] = { 6, 5, 3, 1, 8, 7, 2, 4 };
int n = sizeof(vec) / sizeof(vec[0]);
printf("Original array: ");
for (int i = 0; i < n; i++) {
printf("%d ", vec[i]);
}
quicksort(vec, 0, n - 1);
printf("\nSorted array: ");
for (int i = 0; i < n; i++) {
printf("%d ", vec[i]);
}
return 0;
}
```
在上面的代码中,我们首先定义了两个辅助函数:swap() 和 partition()。swap() 函数用于交换两个数字,而 partition() 函数用于将数组分成两个部分,并返回 pivot 的索引。
然后我们定义了一个 quicksort() 函数,它是一个递归函数。如果 start 小于 finish,我们选择一个 pivot 点,然后将数组分成两个部分:左边的部分包含小于 pivot 的所有元素,右边的部分包含大于 pivot 的所有元素。然后我们递归地对左右两个部分进行排序。
在 main() 函数中,我们定义了一个整数数组 vec,并打印出原始数组。然后我们调用 quicksort() 函数对数组进行排序,并打印出排序后的数组。
阅读全文