public static void shift(int[] arr, int offs) { // eg arr = 1,2,3,4,5,6,7,8,9; offs = 3 offs %= arr.length; offs = offs < 0 ? arr.length + offs : offs; if (offs > 0) { // reverse whole array (arr = 9,8,7,6,5,4,3,2,1) for (int i = 0, j = arr.length - 1; i < j; i++, j--) swap(arr, i, j); // reverse left part (arr = 7,8,9,6,5,4,3,2,1) for (int i = 0, j = offs - 1; i < j; i++, j--) swap(arr, i, j); // reverse right part (arr = 7,8,9,1,2,3,4,5,6) for (int i = offs, j = arr.length - 1; i < j; i++, j--) swap(arr, i, j); } } private static void swap(int[] arr, int i, int j) { int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; }