Algorithm to permute elements in Array
algorithm, arrays, permutation
Solution
This gives you next permutation:
bool Increase(int[] values) {
// locate the last item which is smaller than the following item
int pos = values.Length - 2;
while (pos >= 0 && values[pos] > values[pos + 1]) pos--;
// if not found we are done
if (pos == -1) return false;
// locate the item next higher in value
int pos2 = values.Length - 1;
while (values[pos2] < values[pos]) pos2--;
// put the higher value in that position
int temp = values[pos];
values[pos] = values[pos2];
values[pos2] = temp;
// reverse the values to the right
Array.Reverse(values, pos + 1, values.Length - pos - 1);
return true;
}
Edit: Changed Array.Sort to Array.Reverse. The items are always in descending order and should be in ascending order, so they give the same result.
Problem
Consider the following scenario. I have an array of numbers: ``` [ 1,2,3,4 ] ``` If this array was joined i would have the number 1234. I want to swap the numbers around to achieve the clossest higher number. 1234 will become 1243, which will become 1324, which will become 1342 and so forth.. What algorithm would i need use to make this changes in an array? Ideally i would like to use the algorithm in this manner: ( lets say Array has this algorithm as a function called walkthrough ) ``` [ 1,2,3,4].walkthrough() # gives [ 1, 2, 4, 3 ] [ 1,2,4,3].walkthrough() # gives [ 1, 3, 2, 4 ] ``` the list of numbers continues: 1234 1243 1324 1342 2134 2143 2314 2341 2413 2431 3124 3142 3214 3241