例如:若a所指数组中的数据为:1、2、3、4、5、6、7、8、9,则逆置后依++++++次为:9、8、7、6、5、4、3、2、1。形参n给出数组中数据的个数。#include++++<stdio.h>
时间: 2023-11-29 08:45:35 浏览: 105
以下是C语言实现将数组前半部分元素和后半部分元素对换的代码:
```c
#include <stdio.h>
void fun(int *b, int n) {
int i, j, temp;
for (i = 0, j = n - 1; i < j; i++, j--) {
temp = *(b + i);
*(b + i) = *(b + j);
*(b + j) = temp;
}
}
int main() {
int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int n = sizeof(a) / sizeof(int);
int i;
printf("Original array: ");
for (i = 0; i < n; i++) {
printf("%d ", a[i]);
}
printf("\n");
fun(a, n);
printf("Reversed array: ");
for (i = 0; i < n; i++) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
```
输出结果为:
```
Original array: 1 2 3 4 5 6 7 8 9
Reversed array: 9 8 7 6 5 4 3 2 1
```
相关问题
C语言 (3) 写一个函数,逆置数组元素的值。例如:若a所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则逆置后依次为:9、8、7、6、5、4、3、2、1。在主函数中进行调用和测试。
下面是一个逆置数组元素的函数实现:
```c
void reverse(int arr[], int size)
{
int temp;
for (int i = 0; i < size / 2; i++)
{
temp = arr[i];
arr[i] = arr[size - 1 - i];
arr[size - 1 - i] = temp;
}
}
```
这个函数接受一个整型数组和它的大小作为参数,使用一个循环来交换数组首尾元素,实现逆置数组元素的功能。
在主函数中,我们可以创建一个数组并调用这个函数来测试:
```c
#include <stdio.h>
void reverse(int arr[], int size);
int main()
{
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int size = sizeof(arr) / sizeof(arr[0]);
printf("Original array: ");
for (int i = 0; i < size; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
reverse(arr, size);
printf("Reversed array: ");
for (int i = 0; i < size; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
这个程序输出如下:
```
Original array: 1 2 3 4 5 6 7 8 9
Reversed array: 9 8 7 6 5 4 3 2 1
```
把形参a所指数组中的最小值放在元素a[0]中,接着把a所指数组中的最大值放在a[1]元素中;再把a所指数组元素中的次小值放在a[2]中,把a所指数组元素中的次大值放在a[3],以此类推。 例如,若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7;则按规则移动后,数据排列为:1、9、2、8、3、7、4、6、5。形参n中存放a所指数组中数据的个数。 规定fun函数中的max存放当前所找的最大值,px存放当前所找最大值的下标。
以下是一个可能的解法:
```
void fun(int a[], int n) {
int max, min, px, py, i, j, t;
for (i = 0; i < n - 1; i += 2) {
max = a[i];
px = i;
min = a[i + 1];
py = i + 1;
for (j = i + 2; j < n; j++) {
if (a[j] > max) {
max = a[j];
px = j;
}
if (a[j] < min) {
min = a[j];
py = j;
}
}
if (px != i) {
t = a[i];
a[i] = a[px];
a[px] = t;
if (py == i) {
py = px;
}
}
if (py != i + 1) {
t = a[i + 1];
a[i + 1] = a[py];
a[py] = t;
}
}
}
```
这个函数的实现思路是,每次找到当前未处理部分中的最大值和最小值,然后将它们分别放到规定的位置上。具体来说,我们从第0个位置开始,找到未处理部分中的最大值和最小值,将最大值放到第1个位置,将最小值放到第0个位置。然后从第2个位置开始,找到未处理部分中的次大值和次小值,将次大值放到第3个位置,将次小值放到第2个位置。以此类推,直到处理完所有元素。
注意,这个函数的时间复杂度是O(n^2),并不是最优解。如果需要更高效的算法,可以参考一些排序算法,比如快速排序、堆排序等。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)