一.算法思想
算法主要分为三部分:①将整个顺序表逆置,即将数组A[a1-bn]逆置为A[bn,bn-1…b1,am,am-1,am-2…a1] 。②将A的前N项A[bn-b1]逆置。 ③将A的后m项A[am-a1]逆置。
二.源代码
//算法主函数
void Exchange(List list,int m,int n,int arraySize) {
Reverse(list,0,m+n-1,arraySize); //整个表先逆置
Reverse(list, 0, n-1, arraySize); //整个表逆置完之后,对前n个元素进行逆置
Reverse(list, n, m + n - 1, arraySize);//整个表逆置完之后,对后m个元素进行逆置
}
//逆置函数
void Reverse(List list,int left,int right,int arraySize) {
//left和right指下标
int temp = 0;
if (left >= right || right >= arraySize)
return;
int mid = (left + right) / 2;
//逆转
for (int i = 0; i <= mid - left;i++) {
temp = list->Data[left + i];
list->Data[left + 1] = list->Data[right - i];
list->Data[right - i] = temp;
}
}