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;
}