编写程序,将一维数组x中大于平均值的数据移至数组的前部,小于等于平均值的数据移至数组的后部。 用c语言编写,用数组不用指针
时间: 2024-11-27 21:23:03 浏览: 16
西南交通大学计算机程序设计基础-实验8-C++.docx
5星 · 资源好评率100%
在C语言中,你可以使用双指针技术来实现这个功能。首先,计算数组的平均值,然后分别遍历数组,将小于平均值的元素移到左边,大于平均值的元素移到右边。以下是详细的步骤:
```c
#include <stdio.h>
double find_average(int arr[], int n) {
double sum = 0;
for (int i = 0; i < n; i++) {
sum += arr[i];
}
return sum / n;
}
void partition_and_sort(int arr[], int n, double avg) {
int left = 0, right = n - 1;
while (left <= right) {
// 将小于平均值的元素移到左边界
while (arr[left] > avg && left < right) {
left++;
}
// 将大于平均值的元素移到右边界
while (arr[right] <= avg && left < right) {
right--;
}
// 交换左右两边的元素
if (left < right) {
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
}
}
int main() {
int x[] = {4, 6, 2, 8, 5, 7};
int n = sizeof(x) / sizeof(x[0]);
double avg = find_average(x, n);
printf("Original array: ");
for (int i = 0; i < n; i++) {
printf("%d ", x[i]);
}
partition_and_sort(x, n, avg);
printf("\nSorted array: ");
for (int i = 0; i < n; i++) {
printf("%d ", x[i]);
}
return 0;
}
```
运行上面的代码后,原始数组`x`会按照题目要求调整顺序。数组中的数字会在平均值两侧形成两个部分,左侧是平均值以下的元素,右侧是平均值以上的元素。
阅读全文