public static boolean nextPermutation(int[] p) {
//由倒數第二個元素往前找,若發現前一個元素a小於
//目前的元素,則把前一個元素a的index給取出來.
int a = p.length - 2;
while (a >= 0 && p[a] >= p[a + 1]) {
a--;
}
//假如一直都沒有找到上列的情況,則代表這是最大的數
if (a == -1) {
return false;
}
//由最後一個元素往前找,若發現有b元素大於
//剛剛取出來的a元素值,則把b的index給取出來.
int b = p.length - 1;
while (p[b] <= p[a]) {
b--;
}
//將a,b兩者的位置互換
int t = p[a];
p[a] = p[b];
p[b] = t;
//將元素a以下的值做由小到大的排序
for (int i = a + 1, j = p.length - 1; i < j; i++, j--) {
t = p[i];
p[i] = p[j];
p[j] = t;
}
return true;
}