数组rotate
将数组进行循环左移位的代码实现,杂技算法,确实很杂技:
#include <stdio.h>
#include <stdlib.h>
#define swap(a,b) {int temp = (a); (a) = (b); (b) = temp;}
void rotate(int a[], int n, int m)
{
int i, len, p = 0, r = n - 1;
while(1)
{
len = 1 + r - p;
if(2 * m == len)
{
for(i = 0; i < m; ++i)
{
swap(a[p + i], a[p + m + i]);
}
return;
}
else if(2 * m < len)
{
for(i = 0; i < m; ++i)
{
swap(a[p + i], a[1 + r - m + i]);
}
r -= m;
}
else
{
for(i = 0; i < len - m; ++i)
{
swap(a[p + i], a[p + m + i]);
}
p += len - m, m = 2 * m - len;
}
}
}
int main()
{
int A[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, i;
rotate(A, 10, 3);
for(i = 0; i < 10; ++i)
{
printf("%d", A[i]);
}
printf("\n");
return 0;
}

浙公网安备 33010602011771号