/*
* 算法思想:
* 从后往前遍历数组中元素,当遍历到i元素时,从后往前在len-1->i+1范围内查找是否有元素小于arr[i]并且找出最大的一个,记下其index;
* 如上说法,寻找到后交换index与i元素后推出即可。
*
*/
void swap(int *a, int *b){
int c = *a;
*a = *b;
*b = c;
}
int find_small(int *arr, int len, int index, int val){
int i;
int max = -1;
int max_index = -1;
for(i=len-1; i>index; i--){
if(arr[i]<val && arr[i]>max){
max = arr[i];
max_index = i;
}
}
return max_index;
}
int* prevPermOpt1(int* arr, int len, int* returnSize){
int i, j;
int tmp;
for(i=len-1; i>=0; i--){
tmp = find_small(arr, len, i, arr[i]);
if(tmp != -1){
swap(&arr[i], &arr[tmp]);
break;
}
}
*returnSize = len;
return arr;
}