在C语言中,数组和字符串的逆序排列是常见的算法练习。以下是实现方法及示例代码:
一、数组逆序排列
1. 原地逆序(交换元素)
通过双指针法,使用两个指针分别指向数组的首尾,交换对应元素后向中间移动指针,直到相遇或交错。
示例代码:
```c
include
// 函数声明
void reverseArray(int arr[], int n);
void reverse(char *str);
int main() {
// 整数数组逆序
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr)/sizeof(arr);
printf("原数组: ");
for(int i = 0; i < n; i++) printf("%d ", arr[i]);
reverseArray(arr, n);
printf("\n逆序后: ");
for(int i = 0; i < n; i++) printf("%d ", arr[i]);
printf("\n");
// 字符串逆序
char str[] = "Hello, World!";
printf("原字符串: %s\n", str);
reverse(str);
printf("逆序后: %s\n", str);
return 0;
}
// 交换数组元素的函数
void reverseArray(int arr[], int n) {
int start = 0, end = n - 1;
while(start < end) {
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
}
// 交换字符串字符的函数
void reverse(char *str) {
int start = 0, end = strlen(str) - 1;
while(start < end) {
char temp = str[start];
str[start] = str[end];
str[end] = temp;
start++;
end--;
}
}
```
2. 动态输入数组
通过循环读取用户输入的整数,存储到动态分配的数组中,输入0结束输入,然后调用逆序函数。
示例代码:
```c
include include int main() { int *arr = NULL; int n = 0, i; printf("输入整数(输入0结束):"); while(1) { int num; scanf("%d", &num); if(num == 0) break; arr = realloc(arr, (n + 1) * sizeof(int)); if(arr == NULL) { printf("内存分配失败!\n"); break; } arr[n++] = num; } printf("输入的数组:"); for(i = 0; i < n; i++) printf("%d ", arr[i]); printf("\n逆序后:"); reverseArray(arr, n); printf("\n"); free(arr); return 0; } ``` 二、字符串逆序(字符数组) 1. 原地逆序 通过双指针法交换字符串首尾字符,逐步向中间移动指针。 示例代码: ```c include include void reverse(char *str) { int start = 0, end = strlen(str) - 1; while(start < end) { char temp = str[start]; str[start] = str[end]; str[end] = temp; start++; end--; } } int main() { char str[] = "Hello, World!"; printf("原字符串: %s\n", str); reverse(str); printf("逆序后: %s\n", str); return 0; } ``` 2. 使用标准库函数 C语言标准库提供了`strrev`函数,可直接逆序字符串。 示例代码: ```c include include int main() { char str[] = "Hello, World!"; printf("原字符串: %s\n", str); strrev(str); printf("逆序后: %s\n", str); return 0; } ``` 三、其他方法 1. 递归逆序 通过递归调用实现数组或字符串逆序,但效率较低,不推荐用于大规模数据。 2. 使用库函数 部分编译器提供`qsort`函数,可结合自定义比较函数实现排序,但需注意`qsort`本身是排序而非逆序[