实现:逐一取出,累加之
int SumI(int A[], int n){ int sum=0;//o(1) for(int i=0;i<n;i++){//o(n) sum+=A[i];}//o(1) return sum; }T(n)=o(n)
A[0,n],子区间A[lo,hi] 接口:
void reverse(int* A, int lo, int hi);递归版:
if(lo<hi){swap(A[lo], A[hi]);reverse(A, lo+1, hi+1);}迭代版: while(lo<hi){swap(A[lo++], A[hi–]);}
T(n)=o(n)
从数组区间A[lo,hi]中找出最大的数A[x1]>=A[x2]
方法1
void max2(int A[], int lo, int hi, int & x1, int & x2){ for(x1=lo,int i=lo+1;i<hi;i++){ if(A[x1]<A[i]) x1=i; } for(x2=lo,int i=lo+1;i<x1;i++){//扫描x1前的 if(A[x2]<A[i]) x2=i; } for(nt i=x1+1;i<hi;i++){//扫描x1后的 if(A[x2]<A[i]) x2=i; } }比较总数2n-3
方法2:
void(int A[], int lo, int hi, int & x1, int & x2){ if(A[x1=lo]<A[x2=lo+1]){swap(x1,x2);} for(int i=lo+2;i<hi;i++){ if(A[x2]<A[i]){ if(A[x1]<A[x2=i]swap(x1,x2);) } } }最好时:n-1 最坏时:2n-3