void DisplayArray(int *pArray, int nLen) { for (int i = 0; i < nLen; ++i) { printf("array[%d] = %d
", i, pArray[i]); } }
void SwapSubArray(int *pArray1, int *pArray2, int n) { int temp; for (int i = 0; i < n; ++i) { temp = *(pArray1 + i); *(pArray1 + i) = *(pArray2 + i); *(pArray2 + i) = temp; } }
void ChangeArray(int *pArray, int nLen, int k) { if (NULL == pArray) return; if (k < 0 || k > nLen - 1) return;
int m, n, num; if (nLen - k - 1 > k + 1) // 如果后半部分的元素多 { m = nLen - k - 1 - k - 1; // m是两部分元素数量之差 SwapSubArray(pArray, pArray + k + 1 + m, k + 1); // 交换两部分元素数目相同的部分 ChangeArray(pArray, nLen - k - 1, k); } else if (nLen - k - 1 < k + 1) // 如果前半部分的元素多 { m = k + 1 - nLen + k + 1; SwapSubArray(pArray, pArray + k + 1, k + 1 - m); // 交换两部分元素数目相同的部分 ChangeArray(pArray + nLen - k - 1, k + 1, m - 1); } else // 前后两部分元素数量相同 { SwapSubArray(pArray, pArray + k + 1, k + 1); } }
int main() { int array[] = {0, 1, 2, 3, 4, 5, 6, 7}; int nLen = sizeof(array) / sizeof(array[0]); DisplayArray(array, nLen);