Advertisement
Guest User

Untitled

a guest
Feb 11th, 2016
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.65 KB | None | 0 0
  1. #ifndef INPLACE_ALGORITHMS
  2. #define INPLACE_ALGORITHMS
  3.  
  4. template<
  5. class value_t,
  6. class index_t>
  7. void permute(
  8. value_t * data,
  9. index_t * perm,
  10. index_t length) {
  11.  
  12. for (index_t i = 0; i < length; i++) {
  13. if (perm[i] >= length) {
  14.  
  15. // unmark
  16. perm[i] -= length;
  17. continue;
  18. }
  19.  
  20. auto v = data[i];
  21. auto j = perm[i];
  22.  
  23. while (j != i) {
  24.  
  25. // swap
  26. auto tmp = data[j]; data[j] = v; v = tmp;
  27.  
  28. // hop and mark as visited
  29. perm[j] += length;
  30. j = perm[j]-length;
  31. }
  32.  
  33. data[i] = v;
  34. }
  35. }
  36.  
  37. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement