题目要求
将数组 (a1, a2, a3, ..., am, b1, b2, ..., bn)
转换成 (b1, b2, ..., bn, a1, a2, a3, ..., am)
。
代码实现步骤
第一步:定义反转函数
根据题目中的“将数组中的元素顺序反转”,我们需要实现一个函数 Reverse
,用于反转数组中从 start
到 end
的元素。
// 函数用于反转数组A中从start到end的元素
void Reverse(int A[], int start, int end) {int temp;// 使用while循环进行元素交换,直到start和end相遇或交叉while (start < end) {temp = A[start]; // 保存A[start]的值A[start] = A[end]; // 将A[end]的值赋给A[start]A[end] = temp; // 将temp(原A[start]的值)赋给A[end]start++; // 移动start指针end--; // 移动end指针}
}
第二步:定义数组转换函数
根据题目中的“将数组A中前m个元素和后n个元素的位置互换”,我们需要实现一个函数 change
,用于完成数组的转换。
// 函数用于将数组A中前m个元素和后n个元素的位置互换
void change(int A[], int m, int n) {int total = m + n; // 计算数组的总长度// 反转整个数组Reverse(A, 0, total - 1); // 反转整个数组,使其变为(a1, a2, ..., am, b1, b2, ..., bn)// 反转前m个元素Reverse(A, 0, m - 1); // 反转前m个元素,使其变为(b1, b2, ..., bn, a1, a2, ..., am)// 反转后n个元素Reverse(A, m, total - 1); // 反转后n个元素,使其变为(b1, b2, ..., bn, a1, a2, ..., am)
}
第三步:在 main
函数中测试数组转换
根据题目中的“测试数组转换功能”,我们需要在 main
函数中创建一个数组并测试 change
函数的功能。
int main() {int A[] = {1, 2, 3, 4, 5, 6, 7}; // 示例数组int m = 3; // 前半部分元素个数int n = 4; // 后半部分元素个数change(A, m, n); // 调用change函数进行数组转换// 打印转换后的数组for (int i = 0; i < m + n; i++) {printf("%d ", A[i]);}printf("\n");return 0;
}
代码注释
- Reverse 函数:接受数组
A
和两个索引start
和end
,用于反转数组中从start
到end
的元素。 - change 函数:接受数组
A
和两个长度m
和n
,用于将数组中前m
个元素和后n
个元素的位置互换。 - main 函数:用于测试
change
函数的功能,创建一个示例数组A
,并定义前半部分和后半部分的元素个数m
和n
。调用change
函数后,打印结果数组。