给定包含n个元素的整型数组a[1],a[2],...,a[n],利用快速排序算法对其进行递增排序,请输出排序过程,即每次Partition之后的数组。最后输出排序后的数组。每次选择所处理的子数组的第一个元素作为基准元素。 输入格式: 输入为两行,第一行为一个整数n(1<n≤1000),表示数组长度。第二行为n个空格间隔的整数,表示待排序的数组。 输出格式: 输出为若干行,每行依次输出Partition后的数组,每个元素后一个空格。最后一行输出排序后的数组。C语言代码
时间: 2024-03-24 15:37:02 浏览: 83
下面是快速排序的C语言代码实现:
```c
#include <stdio.h>
void quickSort(int a[], int left, int right);
int partition(int a[], int left, int right);
int main()
{
int n;
scanf("%d", &n);
int a[1001];
for (int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
quickSort(a, 0, n - 1);
for (int i = 0; i < n; i++)
{
printf("%d ", a[i]);
}
return 0;
}
void quickSort(int a[], int left, int right)
{
if (left < right)
{
int pivot = partition(a, left, right);
quickSort(a, left, pivot - 1);
quickSort(a, pivot + 1, right);
}
}
int partition(int a[], int left, int right)
{
int pivot = a[left];
int i = left + 1;
int j = right;
while (i <= j)
{
while (i <= j && a[i] < pivot)
{
i++;
}
while (i <= j && a[j] > pivot)
{
j--;
}
if (i <= j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
i++;
j--;
}
}
int temp = a[left];
a[left] = a[j];
a[j] = temp;
for (int k = left; k <= right; k++)
{
printf("%d ", a[k]);
}
printf("\n");
return j;
}
```
输入示例:
```
10
4 8 2 5 1 9 6 3 7 10
```
输出示例:
```
3 1 2 4 5 9 6 8 7 10
1 2 3 4 5 9 6 8 7 10
1 2 3 4 5 7 6 8 9 10
1 2 3 4 5 7 6 8 9 10
1 2 3 4 5 6 7 8 9 10
```
阅读全文