int location( int k,int m)
{
if ( k>=m ) return 2*(k%m)+1;
return 2*(k%m);
}
int main(int argc,char *argv[])
{
int temp,index=1,free=1,i=1,max=2,M=9,newL;
int arr[2*9] = {11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29};
temp = arr[1];
while(i++<=2*M-2)
{
if( index<M && index == max ) max = index+1;
int a[2n];
int i = 1;
int p;
int temp = a[0];
a[0] = a[1];
while (true)
{
if (i % 2)
p = (i + 2n - 1) / 2
else
p = i / 2;
a[i] = a[p];
a[p] = a[0];
a[0] = a[i];
i = p;
if (p = 1) break;
}
a[0] = temp;
上面的存在问题
修改下
假设当前位置为x x从零开始 总共2n个位置
则移动到位置p
if even(x) p = x / 2
if odd(x) p = (x + 2n - 1) / 2
int a[2n];
int i = 1;
int p;
int temp = a[0];
a[0] = a[1];
while (i <> 1)
{
if (i % 2)
p = (i + 2n - 1) / 2
else
p = i / 2;
a[i] = a[p];
a[p] = a[0];
a[0] = a[i];
i = p;
}
a[1] = a[0];
a[0] = temp;