📅  最后修改于: 2023-12-03 15:00:12.733000             🧑  作者: Mango
有一个长度为N的整型数组,其中N为偶数,将数组前一半与后一半元素位置交换,返回交换后的数组。例如,原数组为{1,2,3,4,5,6},交换后的数组为{4,5,6,1,2,3}。
int arr[] = {1,2,3,4,5,6};
int n = sizeof(arr)/sizeof(arr[0]);
int* result = swap_half_array(arr, n);
for(int i=0; i<n; i++){
printf("%d ", result[i]);
}
输出结果:
4 5 6 1 2 3
/**
* 交换数组前一半与后一半元素位置
* @param arr 整型数组首元素指针
* @param n 数组长度
* @return 返回交换后的数组(动态分配空间)
*/
int* swap_half_array(int* arr, int n){
int* tmp_arr = (int*)malloc(sizeof(int) * n); //中间数组
int half_n = n / 2; //数组长度的一半
//拷贝arr[0]~arr[n/2-1]到tmp_arr[n/2]~tmp_arr[n-1]中
memcpy(tmp_arr + half_n, arr, sizeof(int) * half_n);
//拷贝arr[n/2]~arr[n-1]到tmp_arr[0]~tmp_arr[n/2-1]中
memcpy(tmp_arr, arr + half_n, sizeof(int) * half_n);
return tmp_arr;
}
以上就是本题的解答思路和代码实现。注意要使用动态内存分配并掌握 memcpy()
函数的使用。