数组反转的C++实现

C++实现部分

//数组长度计算,接收数组首元素地址,返回数组长度
template<class T>
int length(T& arr)
{
    return sizeof(arr)/sizeof(arr[0]);//数组总大小除以一个元素的大小即为数组长度
}
//数组倒序,接收数组首元素地址,无返回值
void reverse(int * a,int n)
{
    //第一种倒序方法
    /*
    for(int j=0;j<n;j++)
    {
        for(int i=0;i<n-j-1;i++)
        {
            a[i]=a[i]+a[i+1];
            a[i+1]=a[i]-a[i+1];
            a[i]=a[i]-a[i+1];
        }
    }
     */

    //第二种倒序方法
    /*
    for(int i=0;i<n;i++,n--)
    {
        a[i]=a[i]+a[n-1];
        a[n-1]=a[i]-a[n-1];
        a[i]=a[i]-a[n-1];
    }
     */

    //第三种方法
    int b[n];
    for(int i=0;i<n;i++)
    {
        b[n-i-1]=a[i];
    }
    for(int i=0;i<n;i++)
    {
        a[i]=b[i];
    }

}
//测试函数
void test()
{
    //先定义一个数组
    static int a[10] = {0,1,2,3,4,5,6,7,8,9};
    for(int i=0;i<10;i++)
    {
        printf("%d ",a[i]);
    }
    printf("\n");

    //a:数组第一个元素地址
    //length(a):数组的长度
    reverse(a, length(a));//数组名字作为形参时,实际上传递的是首元素的地址
    for(int i=0;i<10;i++)
    {
        printf("%d ",a[i]);
    }
    printf("\n");
}
int main(int argc,char **argv)
{
    test();
    return 0;
}

说明

第一种类似于冒泡排序,不同之处在于无需判断相邻两个元素的大小,直接交换他们的值即可。
第二种方法直接依次交换首尾两元素,每次交换后,首尾枢轴分别向中心靠拢一位
第三种方法将数组元素插入反向遍历的新数组里,在将新数组正向赋值到旧数组里即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值