天天看點

實作順序表前N元素和後M元素互換位置

//算法思想:先将數組A[m+n]的全部元素原地逆置,再對前m和後n個元素分别逆置
bool Reverse(SqList& A, int left, int right) {
  if (left >= right || right > A.length || A.length <= 0)//取值範圍
  {
    return false;
  }
  int i = 0, j = 0, p = 0, k = 0;
  int mid = (left + right) / 2;
  for (int i = 0; i <= mid-left; i++)//前後兩兩交換
  {
    int  temp = A.data[left + i];
    A.data[left + i] = A.data[right - i];
    A.data[right - i] = temp;
  }
  return true;
}
bool Exchange(SqList& A, int m, int n)
{

  Reverse(A, 0, m + n - 1);
  Reverse(A, 0, n - 1);
  Reverse(A, n, m + n - 1);
  return true;
}