阅读量:0
在C语言中,逆序排列一个数组可以通过多种方法实现。这里我们将分析两种常见的方法:使用额外的数组和原地逆序。
- 使用额外的数组:
#include<stdio.h> void reverse(int arr[], int n) { int temp[n]; for (int i = 0; i < n; i++) { temp[i] = arr[n - 1 - i]; } for (int i = 0; i < n; i++) { arr[i] = temp[i]; } } int main() { int arr[] = {1, 2, 3, 4, 5}; int n = sizeof(arr) / sizeof(arr[0]); reverse(arr, n); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } return 0; }
在这种方法中,我们创建了一个与原始数组大小相同的临时数组temp
。这将占用与原始数组相同的内存空间。因此,内存消耗为O(n)。
- 原地逆序:
#include<stdio.h> void reverse(int arr[], int n) { int start = 0; int end = n - 1; while (start < end) { int temp = arr[start]; arr[start] = arr[end]; arr[end] = temp; start++; end--; } } int main() { int arr[] = {1, 2, 3, 4, 5}; int n = sizeof(arr) / sizeof(arr[0]); reverse(arr, n); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } return 0; }
在这种方法中,我们不需要额外的数组。我们只需要一个临时变量来交换数组元素。因此,内存消耗为O(1)。
总结:
- 使用额外数组的方法会导致O(n)的内存消耗。
- 原地逆序方法只需要O(1)的内存消耗。
在实际应用中,如果内存消耗是关键因素,那么原地逆序方法更加高效。