1. 算法描述:
【数据序列倒置算法】将容器中的数据进行倒置
2. 算法求解步骤:
- E1(定义两个迭代器):分别指向容器的头部数据和尾部数据
- E2(判断迭代器大小):如果头部迭代器小于尾部迭代器,算法结束;否则交换两个迭代器的数据,头部迭代器自增,尾部迭代器自减,进入E2
3. C++代码求解:
/*@author @还下着雨ZG
* @brief 将数组中的数据进行倒置
* @param[in] int arr[],待倒置的数组
* @param[in] int iLen, 数组的长度
* @return iRes,整数表示算法成功,负数表示算法执行失败
*/
int sortReverse(int arr[], int iLen)
{
if(iLen <= 0)
{
return -1;
}
if(0 == arr)
{
return -2;
}
int *ptrHead = arr;
int *ptrRear = arr + iLen - 1;
while(ptrHead < ptrRear)
{
int iTmp = *ptrHead;
*ptrHead = *ptrRear;
*ptrRear = iTmp;
++ptrHead;
--ptrRear;
}
return 1;
}
算法优化:避免引入中间变量,从而减少算法的空间复杂度
/*@author @还下着雨ZG
* @brief 将数组中的数据进行倒置
* @param[in] int arr[],待倒置的数组
* @param[in] int iLen, 数组的长度
* @return iRes,整数表示算法成功,负数表示算法执行失败
*/
int sortReverse(int arr[], int iLen)
{
if(iLen <= 0)
{
return -1;
}
if(0 == arr)
{
return -2;
}
int *ptrHead = arr;
int *ptrRear = arr + iLen - 1;
while(ptrHead < ptrRear)
{
*ptrHead = *ptrHead + *ptrRear;
*ptrRear= *ptrHead - *ptrRear;
*ptrHead = *ptrHead - *ptrRear;
++ptrHead;
--ptrRear;
}
return 1;
}