Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. public static boolean nextPermutation(int[] p) {
  2.         //由倒數第二個元素往前找,若發現前一個元素a小於
  3.         //目前的元素,則把前一個元素a的index給取出來.
  4.         int a = p.length - 2;
  5.         while (a >= 0 && p[a] >= p[a + 1]) {
  6.             a--;
  7.         }
  8.         //假如一直都沒有找到上列的情況,則代表這是最大的數
  9.         if (a == -1) {
  10.             return false;
  11.         }
  12.         //由最後一個元素往前找,若發現有b元素大於
  13.         //剛剛取出來的a元素值,則把b的index給取出來.
  14.         int b = p.length - 1;
  15.         while (p[b] <= p[a]) {
  16.             b--;
  17.         }
  18.         //將a,b兩者的位置互換
  19.         int t = p[a];
  20.         p[a] = p[b];
  21.         p[b] = t;
  22.         //將元素a以下的值做由小到大的排序
  23.         for (int i = a + 1, j = p.length - 1; i < j; i++, j--) {
  24.             t = p[i];
  25.             p[i] = p[j];
  26.             p[j] = t;
  27.         }
  28.         return true;
  29.     }