将一个n元一维向量向左旋转i个位置。例如,当n = 8且i = 3时,向量abcdefgh旋转为defghabc

来源:互联网 发布:淘宝评价多久过期 编辑:程序博客网 时间:2024/05/21 16:56
  1. 采用三次翻转的经典解法
  2. void Swap(char *a, char *b)
  3. {
  4.     char temp = *a;
  5.     *= *b;
  6.     *= temp;
  7. }

  8. void Reverse(char *str, int left, int right)
  9. {
  10.     if(str == NULL || left >= right)
  11.     {
  12.         return;
  13.     }
  14.     while(left < right)
  15.     {
  16.         Swap(&str[left], &str[right]);
  17.         left++;
  18.         right--;
  19.     }
  20. }

  21. void RightShift(char *str, int k)
  22. {
  23.     if(str == NULL)
  24.     {
  25.         return;
  26.     }
  27.     int length = strlen(str);
  28.     k = k % length;

  29.     Reverse(str, 0, k - 1);
  30.     Reverse(str, k , length - 1);
  31.     Reverse(str, 0 , length - 1);
  32. }
0 0
原创粉丝点击