经过了之前遍历顺序表的练习之后,今天让我们来看一下它的升级版
设计一个高效的算法,将顺序表L的元素逆置,要求算法空间复杂度为O(1)
//分析:
//不妨设L 1 2 3 4
//逆置结果 4 3 2 1
//其实归根结底是前后交换 ———— 1与4交换,2与3交换
//易得,需要交换L.length/2次(向下取整)
Void Reverse(Sqlist &L){ //结构改变,使用引用符
int temp; //引入中间变量
for(int i=0;i<L.length/2;i++){
temp=L.data[i];
L.data[i]=L.data[L.length-i-1]; //实现前后(首尾)交换
L.data[L.length-i-1]=temp;
}
}
这道题整体来说不难,但在考试中难免会因为紧张想不到这种算法。如果真的出现了很紧张很紧张导致大脑一片空白的话,可以使用最简单暴力的循环和判断语句,任何题都可以暴力求解。虽然这样不符合题中对于复杂度的要求,但最起码有分数,总比空白好,而且据说分数还不少(我也不清楚,还没考过,等考完再回来更新答案😂)。
最后,希望大家都可以理解这种算法
考试加油
但行好事,莫问前程