typedef char DataType; void CyclicShift_1(DataType* arr, int n, int k) { k %= n; while (k--) { DataType t = arr[n-1]; for (int i = n - 1; i > 0; i--) { arr[i] = arr[i - 1]; } arr[0] = t; } } void swap(DataType* a, DataType* b) { DataType t = *a; *a = *b; *b = t; } void Reverse(DataType* arr, int b, int e) { for (; b < e; b++, e--) { swap(&arr[b],&arr[e]); } } void CyclicShift_2(DataType* arr, int n, int k) { k %= n; Reverse(arr,0,n - k - 1); Reverse(arr,n - k,n - 1); Reverse(arr,0,n - 1); }