算法 Tricks(一)—— 字符串和数组的翻转

来源:互联网 发布:装linux系统 双系统 编辑:程序博客网 时间:2024/06/09 18:38

所谓字符串和数组的翻转,其实是对应位的交换,考察的是下标之间的关系,要交换的下标的关系为:

swap(S[i],S[n1i])

也即下标之和为数组的长度减1,而与数组的长度为奇数还是偶数无关。

void ReverseArray(int *A, int n){    for (int i = 0; i < n/2; ++i){        swap(A[i], A[n-1-i]);    }}

当然更一般化的接口设计为:

void ReverseArray(int *A, int lo, int hi){    // ReverseArray(int *A, int n) ⇒ ReverseArray(A, 0, n)    // [lo, hi)    for (int i = 0; i < (lo + hi)/2; ++i){        swap(A[lo + i], A[hi - i - 1]);    }                // lo + i + (hi - i - 1) == lo + hi - 1}

当然也可以不借助 swap 函数的写法为:

void ReverseArray(int *A, int lo, int hi){    while (lo < hi){        int t = A[lo];        A[lo++] = A[--hi];        A[hi] = t;    }}
0 0
原创粉丝点击