讀入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"); }
