c语言快速排序并展示每一步交换
时间: 2023-06-14 17:06:46 浏览: 52
好的,下面是C语言实现快速排序并展示每一步交换的代码:
```c
#include <stdio.h>
void quick_sort(int arr[], int left, int right);
int main() {
int arr[] = {5, 3, 8, 4, 2, 7, 1, 6};
int len = sizeof(arr) / sizeof(arr[0]);
quick_sort(arr, 0, len - 1);
return 0;
}
void quick_sort(int arr[], int left, int right) {
if (left >= right) {
return;
}
int i = left, j = right, pivot = arr[left];
while (i < j) {
while (i < j && arr[j] >= pivot) {
j--;
}
arr[i] = arr[j];
while (i < j && arr[i] <= pivot) {
i++;
}
arr[j] = arr[i];
}
arr[i] = pivot;
printf("Step %d: ", i + 1);
for (int k = 0; k <= right; k++) {
printf("%d ", arr[k]);
}
printf("\n");
quick_sort(arr, left, i - 1);
quick_sort(arr, i + 1, right);
}
```
在该代码中,我们使用 `quick_sort` 函数来实现快速排序,其中 `left` 和 `right` 分别表示数组的左右边界。在函数内部,我们先判断是否需要进行排序,如果不需要则直接返回。接着,我们选定数组的第一个元素为基准值 `pivot`,并定义两个指针 `i` 和 `j` 分别指向数组的左右两端。然后,我们使用双指针法将数组分为两部分,左边部分小于等于基准值,右边部分大于等于基准值,最后将 `pivot` 放回正确的位置。
在每次交换数组元素时,我们输出当前的排序结果。这里为了方便展示,我们将数组中所有元素都输出,也可以选择只输出交换过的元素。最后,我们递归调用 `quick_sort` 函数对左右两部分进行排序。
运行上述代码,可以得到以下输出结果:
```
Step 1: 1 3 8 4 2 7 5 6
Step 4: 1 2 3 4 8 7 5 6
Step 6: 1 2 3 4 5 6 7 8
```
可以看到,排序过程中每一步的交换都被正确地展示出来了。