
int cmp(const void *a, const void *b)
{
return *((int *)a) - *((int *)b);
}
void nextPermutation(int* nums, int numsSize){
if(!nums || numsSize <= 1) {
return;
}
int i = numsSize - 1;
bool flag = false;
for (; i > 0; i--) {
if (nums[i] > nums[i - 1]) {
flag = true;
break;
}
}
if (flag) {
int change = nums[i - 1];
int min_value = nums[i];
for (int j = i; j < numsSize; j++) {
if (nums[j] > change) {
min_value = nums[j] < min_value ? nums[j] : min_value;
}
}
int j = i;
for (; j < numsSize; j++) {
if (nums[j] == min_value) {
break;
}
}
//printf("%d %d %d %d\n", i, nums[i - 1], j, nums[j] );
int tmp = nums[j];
nums[j] = nums[i - 1];
nums[i - 1] = tmp;
qsort(&nums[i], numsSize - i, sizeof(int), cmp);
} else {
qsort(nums, numsSize, sizeof(int), cmp);
}
}