已知长度为n的顺序表A,设计一个时间复杂度为O(n)的算法,将A中所有元素进行就地逆置。
时间: 2024-10-07 20:06:27 浏览: 44
顺序表就地逆置
要在顺序表A中对所有元素进行就地逆置,你可以使用双指针法,其中一个指针从前往后移动,另一个指针从后往前移动,同时交换两个指针所指向的元素,直到两个指针相遇或交错。
以下是一个C++实现的例子:
```cpp
#include <iostream>
void reverseInPlace(int A[], int n) {
if (n <= 1) return; // 如果数组只有一个元素或者为空,无需反转
int start = 0, end = n - 1;
while (start < end) {
// 交换当前开始位置和结束位置的元素
std::swap(A[start], A[end]);
// 指针向中间移动
start++;
end--;
}
}
int main() {
int n, elem;
std::cout << "请输入序列的长度: ";
std::cin >> n;
int A[n]; // 假设A已经初始化了
std::cout << "请输入" << n << "个整数: ";
for (int i = 0; i < n; i++) {
std::cin >> elem;
A[i] = elem; // 这里只是为了演示输入,实际上你应该从其他来源获取元素
}
reverseInPlace(A, n);
std::cout << "逆置后的序列: ";
for (int i : A) {
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
```
这个`reverseInPlace`函数的时间复杂度确实是O(n),因为它只遍历了一次数组。每次迭代都会交换两个元素,直到整个数组被处理完毕。
阅读全文