把数组的前k位逆置

/*
* 逆置数组arr的前k位:
* (1)递归实现
* (2)迭代实现
* PS.通常递归算法能解决一些不能直接解决的问题,
* 但是递归算法通常要做出效率上的牺牲
* By Guv 2011.06.04
* */
#include <stdio.h>
/*递归实现*/

void invert(int arr[], int k)
{
    if(k>1){
        invert(arr+1,k-2);
        int tmp = arr[0];
        arr[0] = arr[k-1];
        arr[k-1] = tmp;
    }
}

/*迭代*/
/*
void invert(int arr[], int k)
{
    int tmp=0, mid = k/2;
    if (k<2)    return;
    for(int i=0;i<mid;++i){
        tmp = arr[i];
        arr[i] = arr[k-1-i];
        arr[k-1-i] = tmp;
    }
}
*/

/*testing*/
int main()
{
    int array[] = {1,2,5,9,8,7,6,3,5,6,7,8,9,5,6,4,1,5,2,6,3,5};
    int num = sizeof(array)/sizeof(int);

    printf("before inverted:");
    for(int i=0;i<num;++i){
        if (i%5==0)
            printf("\n");
        printf("%d, ", array[i]);
    }

    invert(array, num);

    printf("\nafter inverted:");
    for(int i=0;i<num;++i){
        if (i%5==0)
            printf("\n");
        printf("%d, ", array[i]);
    }
}