正文

编写程序将数组的前m个元素与后n个元素交换2005-09-16 13:09:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/boxer/4812.html

分享到:

/************************************************************************
      长度确定的数组大小为m+n(m、n各自大小不确定),
    编写程序将前m个元素与后n个元素交换,要求空间复杂度
 降到最小,时间复杂度尽量最小。
************************************************************************/
#include
#include

template
void Swap2(T &x, T &y)
{
 T  temp;

 temp = x;
 x    = y;
 y    = temp;
}

// 把values数组的前nCount个元素与从nPos位置开始的nCount个元素交换位置
template
void SwapN(T values[], int nPos, int nCount)
{
 int  i;

 for(i=0; i {
  Swap2(values[i], values[nPos+i]);
 }
}

// 交换数组values的前m个元素和后n个元素的位置
// 借鉴辗转相除法的思想进行辗转移动
template
void SwapMN(T values[], int m, int n)
{
 int  nCurPos = 0;
 int  nMin;

 nMin = m assert(nMin >= 0);

 while(nMin > 0)
 {
  SwapN(values+nCurPos, m, nMin);
  nCurPos += nMin;
  if(m >= n)
  {
   m -= n;
  }
  else
  {
   n -= m;
  }
  nMin = m }
}


void Output(int values[], int n)
{
 int  i;

 printf("\nResult is: \n");
 for(i=0; i {
  printf("%d  ", values[i]);
 }
 printf("\n");
}
 
int main()
{
 int  test[20] = {1,2,3,4,5,6,7,8, 9, 10, 11, 12,13,14,15,16,17,18,19};
 int  m = 13, n = 6;

 SwapMN(test, m, n);
 Output(test, m+n);

 return 0;
}

阅读(5181) | 评论(1)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册