[刷题C] 7-3 将数组中的数逆序存放

tech2022-08-05  124

本题要求编写程序,将给定的n个整数存入数组中,将数组中的这n个数逆序存放,再按顺序输出数组中的元素。

题目分析

接收输入需要把输入的数组逆序存放输出数组

偷懒解法 - 将数组直接倒序输出

如果仅仅是为了通过测试,可以省略第2步,直接将数组倒序输出就行。

#include <stdio.h> int main(int argc, char const *argv[]) { int length = 1; scanf("%d", &length); int a[length]; for (int i = 0; i < length; ++i) { scanf("%d", &a[i]); } for (int i = length - 1; i > 0; i--) printf("%d ", a[i]); printf("%d", a[0]); return 0; }

傻瓜操作 - 从后往前遍历复制到新数组

定义一个新数组,将原数组从后往前复制一份再输出就行。 但需要耗费更多的空间。 时间复杂度O(n),空间复杂度O(n)?

int b[length]; for (int i = 0; i < length; ++i) b[i] = a[length - 1 - i];

原地翻转 - 将原数组首尾对调

只需要一个临时变量,将原数组首位对调即可再输出即可 时间复杂度O(n/2),空间复杂度O(1)?

for (i = 0; i < length<<1; ++i) { int temp; temp = a[i]; a[i] = a[length - 1 - i]; a[length - 1 - i] = temp; }

思考总结

原地翻转更快更节省空间;最后输出字符串时写两个语句就完事,没必要整个if判断int类型占4个字节,如果换成double 甚至long double 类型 交换地址会更快?但岂不是还得搞个数组存地址?
最新回复(0)