数组逆置:
初始数组arr[10]={1,2,3,4,5,6,7,8,9,10};
逆置后 arr[10]={10,9,8,7,6,5,4,3,2,1};
法一(循环逆置):
#include <stdio.h>
void Show(int arr[], int size) {//数组打印函数
int i = 0;
for (i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
void Reverse(int arr[], int size) {//循环逆置函数
int left = 0;//最左下标
int right = size - 1;//最右下标
int temp = 0;
while (left < right) {//左右交换
temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;//左下标+1
right--;//右下标+1
}
}
int main() {
//实现reverse()函数完成数组元素的逆置
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int size = sizeof(arr) / sizeof(arr[0]);//求数组大小
Show(arr, size);//打印初始数组
Reverse(arr, size);//数组逆置
Show(arr, size);//打印逆置后的数组
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/b36d16ba43983a418033b4d418468305.jpeg)
法二(递归逆置):
#include <stdio.h>
void Show(int arr[], int size) {//打印数组函数
int i = 0;
for (i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
void Reverse2(int arr[], int sz) {//递归逆置
static int i = 0;//静态下标变量
int temp = arr[i];//数组i下标元素存到temp
if (0< sz) {//判断访问次数是否继续递归,
i += 1;
Reverse2(arr, sz-1);
}
arr[sz] =temp;//交换元素
}
int main() {
//实现reverse()函数完成数组元素的逆置
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int size = sizeof(arr) / sizeof(arr[0]);//求数组大小
Show(arr, size);//打印初始数组
Reverse2(arr, size-1);//递归逆置
Show(arr, size);//打印逆置后的数组
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/e9c8ecb6b1b6e8005783be62912e58c3.jpeg)