Permutation of a vector

后端 未结 2 847
梦如初夏
梦如初夏 2021-02-02 03:04

suppose I have a vector:

 0  1  2  3  4  5
[45,89,22,31,23,76]

And a permutation of its indices:

[5,3,2,1,0,4]
<
2条回答
  •  灰色年华
    2021-02-02 03:46

    Yes. Starting from the leftmost position, we put the element there in its correct position i by swapping it with the (other) misplaced element at that position i. This is where we need the O(1) additional space. We keep swapping pairs of elements around until the element in this position is correct. Only then do we proceed to the next position and do the same thing.

    Example:

    [5 3 2 1 0 4] initial state

    [4 3 2 1 0 5] swapped (5,4), 5 is now in the correct position, but 4 is still wrong

    [0 3 2 1 4 5] swapped (4,0), now both 4 and 0 are in the correct positions, move on to next position

    [0 1 2 3 4 5] swapped (3,1), now 1 and 3 are both in the correct positions, move on to next position

    [0 1 2 3 4 5] all elements are in the correct positions, end.

    Note:

    Since each swap operation puts at least one (of the two) elements in the correct position, we need no more than N such swaps altogether.

提交回复
热议问题