对C语言的代码进行修改,使得每次进行排序后都输出排序后的数组。
时间: 2024-02-15 19:01:48 浏览: 21
好的,以下是对C语言代码的修改。在对左右两部分进行递归调用之前,先输出当前排序后的数组,这样就可以输出每次 Partition 后的数组了。
```c
#include <stdio.h>
void quick_sort(int arr[], int start, int end);
int partition(int arr[], int start, int end);
void quick_sort(int arr[], int start, int end) {
if (start >= end) // 如果起始下标大于等于终止下标,则直接返回
return;
int p = partition(arr, start, end); // 进行一次 Partition 操作
for (int i = start; i <= end; i++)
printf("%d ", arr[i]); // 输出排序后的数组
printf("\n");
quick_sort(arr, start, p - 1); // 对左半部分进行快排
quick_sort(arr, p + 1, end); // 对右半部分进行快排
}
int partition(int arr[], int start, int end) {
int pivot = arr[start]; // 选择第一个元素作为基准元素
int left = start, right = end; // 定义左右指针
while (left < right) { // 左右指针未相遇时循环
while (left < right && arr[right] >= pivot) // 右指针先走,直到找到小于基准元素的元素
right--;
arr[left] = arr[right]; // 将小于基准元素的元素移到左边
while (left < right && arr[left] <= pivot) // 左指针后走,直到找到大于基准元素的元素
left++;
arr[right] = arr[left]; // 将大于基准元素的元素移到右边
}
arr[left] = pivot; // 将基准元素放到左右两个部分的中间
return left; // 返回基准元素排好序后的下标
}
int main() {
int n, arr[1000];
scanf("%d", &n); // 输入数组长度
for (int i = 0; i < n; i++)
scanf("%d", &arr[i]); // 输入数组
quick_sort(arr, 0, n - 1); // 进行快速排序
for (int i = 0; i < n; i++)
printf("%d ", arr[i]); // 输出排序后的数组
printf("\n");
return 0;
}
```
现在,每次进行排序后都会输出排序后的数组了。