|
发表于 2023-12-15 09:56:45
|
显示全部楼层
抱歉,我之前意外地截断了代码。让我们来修复一下:
- #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 pivotIndex = partition(arr, low, high);
-
- // 对基准元素的左侧子数组进行快速排序
- quickSort(arr, low, pivotIndex - 1);
-
- // 对基准元素的右侧子数组进行快速排序
- quickSort(arr, pivotIndex + 1, high);
- }
- }
- int main() {
- int arr[] = {5, 2, 8, 9, 1, 3};
- int n = sizeof(arr) / sizeof(arr[0]);
-
- printf("排序前的数组:");
- for (int i = 0; i < n; i++) {
- printf("%d ", arr[i]);
- }
-
- quickSort(arr, 0, n - 1);
-
- printf("\n排序后的数组:");
- for (int i = 0; i < n; i++) {
- printf("%d ", arr[i]);
- }
-
- return 0;
- }
复制代码
执行结果是:
排序前的数组:5 2 8 9 1 3
排序后的数组:1 2 3 5 8 9
这段代码实现了快速排序算法,它通过选择基准元素并将数组划分为两个子数组来对数组进行排序。具体来说,它首先选择最后一个元素作为基准,并将数组中小于等于基准的元素放在基准的左边,大于基准的元素放在基准的右边,然后递归地对基准元素两侧的子数组进行排序。最终,数组就会被完全排序。在上述示例中,我们使用{5, 2, 8, 9, 1, 3}作为初始数组进行排序。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|