Algorithm to rotate an array in linear time

后端 未结 22 2146
我寻月下人不归
我寻月下人不归 2020-11-28 05:05

How to rotate an integer array by i times using swap function only in linear time.

22条回答
  •  不知归路
    2020-11-28 06:06

    You can do this in linear time by using a reverse() helper.

    // rotate array of size=size, by n positions
    void rotate(int array[], int size, int n)
    {
      // reverse array[0...size-1]
      reverse(array, 0, size-1);
    
      // reverse A[0...n-1]
      reverse(array, 0, n-1);
    
      // reverse A[n...size-1]
      reverse(array, n, size-1);
    }
    
    // reverse elements in the array[pos_from ... pos_to]
    void reverse(int array[], int pos_from, int pos_to)
    {
       ...
    }
    

    Implementing reverse(int array[], int pos_from, int pos_to) using swaps is left as an exercise for the reader. Hint: This can be done in linear time.

提交回复
热议问题