將數組元素原地逆序。例:[9,6,5,4,1] → [1,4,5,6,9]。
時間 O(n),**空間 O(1)**,**原地操作**。
#include <stdio.h>
#define N 5
int main() {
int a[N] = {9, 6, 5, 4, 1};
int i, temp;
printf("original array: ");
for (i = 0; i < N; ++i) printf("%4d", a[i]);
printf("\n");
// 逆序核心:i 從 0 到 N/2 - 1
for (i = 0; i < N / 2; ++i) {
temp = a[i];
a[i] = a[N - i - 1];
a[N - i - 1] = temp;
}
printf("reversed array: ");
for (i = 0; i < N; ++i) printf("%4d", a[i]);
printf("\n");
return 0;
}
i < N/2:a[i] ↔ a[N-i-1]i=0 ↔ N-1(首尾)i=1 ↔ N-2 …temp:三步交換法,無異或運算技巧(異或交換有風險)
void reverse_array(int *arr, int n) {
int *left = arr;
int *right = arr + n - 1;
while (left < right) {
int tmp = *left;
*left++ = *right;
*right-- = tmp;
}
}
std::reverse (C++)
#include <algorithm>
#include <vector>
vector<int> v = {9,6,5,4,1};
reverse(v.begin(), v.end()); // 原地逆序
數組逆序是指針/索引操作的入門必考。掌握 i < n/2 邊界、三步交換、指針版寫法,並知道標準庫已提供成熟實現,是基礎功扎實的標誌。