求方法!将一个数组的前k个数和后n-k个数交换,要求时间O(n),空间O(1)???

dxrenderman 2005-11-26 09:53:31
求方法!将一个数组的前k个数和后n-k个数交换,要求时间O(n),空间O(1)???
...全文
395 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaocai0001 2005-11-26
  • 打赏
  • 举报
回复
#include <iostream>

void SwapN(int array[], int nLen, int beginPos);

int main()
{
int array[] = {1,2,3,4,5,6,7,8,9};
int len = sizeof(array)/sizeof(int);
int i;
for(i=0; i<len; ++i)
std::cout<<array[i]<<" ";
std::cout<<std::endl;
SwapN(array, sizeof(array)/sizeof(int), 3);
for(i=0; i<len; ++i)
std::cout<<array[i]<<" ";
std::cout<<std::endl;
return 0;
}

// int array[] : 待操作的数组
// int nLen : 数组长度
// int k : 起始位置
void SwapN(int array[], int nLen, int k)
{
k = k % nLen;
if(k == 0)
return;
if(k < 0)
k += nLen;

int count = 0;
int index = 0;
int initpos = -1;
while(count < nLen)
{
++initpos;
int temp = array[initpos];
for(index=initpos; (index+k)%nLen!=initpos; index=(index+k)%nLen)
{
array[index] = array[(index+k)%nLen];
++count;
}
array[nLen + initpos - k] = temp;
++count;
}
}
shootsky 2005-11-26
  • 打赏
  • 举报
回复
不知道用冒泡法行不行,高手教教我

a[0]冒到a[n-k]
a[1]冒到a[n-k+1]
a[k]冒到a[n]

哎,我还太嫩了
shootsky 2005-11-26
  • 打赏
  • 举报
回复
发得太仓促,错了,再改改
cunsh 2005-11-26
  • 打赏
  • 举报
回复
好像不对呀.处女.
shootsky 2005-11-26
  • 打赏
  • 举报
回复
for(i=k;i!=0;i--)
{
temp=a[k-1];
a[k-1]=a[n-1];
a[n-1]=temp;
temp=a[k-1];
a[k-1]=a[n-1-k];
a[n-1-k]=temp;


}

处女回帖,没有调试,不知对不对
dxrenderman 2005-11-26
  • 打赏
  • 举报
回复
no,比如a[6]={1,2,3,4,5,6};
k=2,交换后就为3,4,5,6,1,2
k=5,交换后就为6,1,2,3,4,5
xiaocai0001 2005-11-26
  • 打赏
  • 举报
回复
n > 2k ?

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧