以c语言编写一下程序:给定包含n个元素的整型数组a[1],a[2],...,a[n],利用快速排序算法对其进行递增排序,请输出排序过程,即每次Partition之后的数组。最后输出排序后的数组。每次选择所处理的子数组的第一个元素作为基准元素。 输入格式: 输入为两行,第一行为一个整数n(1<n≤1000),表示数组长度。第二行为n个空格间隔的整数,表示待排序的数组。 输出格式: 输出为若干行,每行依次输出Partition后的数组,每个元素后一个空格。最后一行输出排序后的数组。 输入样例: 5 4
时间: 2024-03-20 10:43:15 浏览: 164
用c语言写的数组排序,读写文件等
以下是快速排序的C语言代码,实现以及输出每次排序后的数组:
```c
#include <stdio.h>
// 交换函数
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
// 分区函数
int partition(int arr[], int left, int right) {
int pivot = arr[left]; // 选择第一个元素作为基准元素
int i = left, j = right;
while (i < j) {
while (i < j && arr[j] >= pivot) j--;
while (i < j && arr[i] <= pivot) i++;
if (i < j) swap(&arr[i], &arr[j]);
}
swap(&arr[left], &arr[i]); // 将基准元素放到正确的位置
return i;
}
// 快速排序函数
void quickSort(int arr[], int left, int right) {
if (left >= right) return;
int pivotIndex = partition(arr, left, right);
printf("%d", arr[left]); // 输出每次Partition后的数组
for (int i = left + 1; i <= right; i++) {
printf(" %d", arr[i]);
}
printf("\n");
quickSort(arr, left, pivotIndex - 1);
quickSort(arr, pivotIndex + 1, right);
}
int main() {
int n;
scanf("%d", &n);
int arr[n];
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
quickSort(arr, 0, n - 1);
printf("%d", arr[0]); // 输出排序后的数组
for (int i = 1; i < n; i++) {
printf(" %d", arr[i]);
}
printf("\n");
return 0;
}
```
输入样例:
```
5
4 3 2 1 5
```
输出样例:
```
4 3 2 1 5
1 3 2 4 5
1 2 3 4 5
```
阅读全文