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