读入100个整数到一个数组中,写出实现该数组进行逆置的算法。
方法一:
假设100个整数读入到数组a中,算法f1的思想是分别从数组两端依次将对应数进行交换,
即a[i]与a[100 - i - 1]进行交换,i = 0~49。
f1所需要的辅助变量为2个整型变量i和temp,与问题的规模无关,其空间复杂度为O(l)。
代码如下:
#include <stdio.h> void f1(int *a, int n) { int i, temp; for(i = 0;i <= n/2 - 1;i++) { temp = a[i]; a[i] = a[n - i - 1]; a[n - i - 1] = temp; } } main() { int a[100],i; int n = 100; for(i = 0;i < n;i++) { a[i] = i; } f1(a, n); for(i = 0;i < n;i++) { printf("%d ", a[i]); } printf("\n"); }
方法二:
算法f2的思想是将数组a先逆置到数组b,再从数组b复制到数组a,
需要辅助变量为1个整型变量i和大小为n=100的整型数组b(与问题的规模相关),
其空间复杂度为O(n)。
代码如下:
#include <stdio.h> void f2(int a[], int n) { int i, b[100]; for(i = 0;i < n;i++) { b[i] = a[n - i - 1]; } for(i = 0;i < n;i++) a[i] = b[i]; } main() { int a[100],i; int n = 100; for(i = 0;i < n;i++) { a[i] = i; } f2(a, n); for(i = 0;i < n;i++) { printf("%d ", a[i]); } printf("\n"); }