//移位的时候,直接把一个元素放到它最终的位置上,但是要注意元素的下标是如何变换的。时间效率O(n),空间效率O(1).
#include<iostream>
#include<fstream>
using namespace std;
int gcd(int n,int k)
{
while(k)
{
int r=n%k;
n=k;
k=r;
}
return n;
}
int _tmain(int argc, _TCHAR* argv[])
{
int n=10; //Öž¶šnºÍk
int k;
while(cin>>k)
{
k=k%n;
int data[10]={1,2,3,4,5,6,7,8,9,10};
int gcdOfnk=gcd(n,k);
cout<<gcdOfnk<<endl;
int Num=n/gcdOfnk;
for(int i=0;i<gcdOfnk;i++)//·ÖΪgcdOfnk×éÀŽÒÆλ
{
int temp=data[i]; //±£Žæÿ×éµÄµÚÒ»žöÔªËØ
int index=i;
for(int j=0;j<Num-1;j++)
{
data[index]=data[(index+k)%n];
index=(index+k)%n;
}
data[index]=temp;
}
for(int i=0;i<n;i++)
{
cout<<data[i]<<" ";
}
cout<<endl;
}
system("pause");
return 2;
}
数组快速移位
最新推荐文章于 2023-04-23 09:42:57 发布