fork download
  1. #include <stdio.h>
  2.  
  3. void Swap(int *a, int *b)
  4. {
  5. int tmp = *a;
  6. *a = *b;
  7. *b = tmp;
  8. }
  9.  
  10. void RotateByPointers(int *first, int *middle, int *last)
  11. {
  12. int *next = middle;
  13. while (first!=next)
  14. {
  15. Swap(first++, next++);
  16. if (next==last) next=middle;
  17. else if (first==middle) middle=next;
  18. }
  19. }
  20.  
  21. void Rotate(int r, int *array, size_t length) {
  22. if (r < 0) {
  23. r = length + r;
  24. }
  25. RotateByPointers(array, array + length - r, array + length);
  26. }
  27.  
  28. void Print(int * array, size_t length)
  29. {
  30. for (size_t i = 0; i < length; ++i) {
  31. printf("%d ", array[i]);
  32. }
  33. printf("\n");
  34. }
  35.  
  36. int main(void) {
  37. int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
  38. size_t length = sizeof(array) / sizeof(array[0]);
  39.  
  40. Rotate(2, array, length);
  41. Print(array, length);
  42.  
  43. Rotate(-4, array, length);
  44. Print(array, length);
  45.  
  46. return 0;
  47. }
Success #stdin #stdout 0s 9432KB
stdin
Standard input is empty
stdout
9 0 1 2 3 4 5 6 7 8 
3 4 5 6 7 8 9 0 1 2