输入n(n≤10)个整数,这组数以第一个数为基点分成两部分,把比它小的数排到它的后面,比它大的数排到它的前面。 输入要求:第一行输入一个整数n;第二行输入n个整数,两个整数之间用空格隔开。
时间: 2024-02-13 13:00:58 浏览: 16
这个问题可以使用快速排序算法来解决。快速排序是一种高效的排序算法,它的核心思想是分治和递归。以下是使用递归的快速排序算法实现将一组数分成两部分的C语言代码:
```c
#include <stdio.h>
// 实现快速排序
void quickSort(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;
quickSort(arr, left, i - 1);
quickSort(arr, i + 1, right);
}
int main() {
// 从键盘读入n和n个整数
int n;
printf("请输入n:");
scanf("%d", &n);
int arr[n];
printf("请输入%d个整数,以空格分隔:", n);
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
// 将这组数分成两部分
quickSort(arr, 0, n - 1);
// 输出结果
printf("将这组数分成两部分的结果:\n");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
在这个示例中,我们首先从键盘读入n和n个整数,然后调用quickSort函数将这组数分成两部分。在quickSort函数中,我们首先选取arr[left]作为基准数pivot,然后使用双指针i和j从left和right两端向中间扫描,找到第一个比pivot小的数和第一个比pivot大的数,并交换它们的位置,直到i和j相遇。最后将pivot放到i的位置,然后递归地对pivot左边和右边的子序列进行排序。最后输出排序后的结果。