从末尾向前数第一个减小的数a[position]
在a[position]到a[N]中找出比a[position]大的最小的数a[index]
a[position]和a[index]交换位置
a[position+1]到a[N]从小到大排列
#include<stdio.h>
#define N 6
int Find(int a[]);
int Arrange(int a[],int i);
int main()
{
int i,position,value,index;
int a[10]={3,2,6,5,4,1};
position=Find(a);
if(position==-1)
retuen -1;
value=a[position+1];
for(i=position;i<N;i++)
{
if(a[i]>a[position]&&a[i]<value)
{
index=i;
value=a[i];
}
}
a[index]=a[position];
a[position]=value;
Arrange(a,position);
for(i=0;i<N;i++)
printf("%d",a[i]);
printf("\n");
}
int Find(int a[])
{
int i;
for(i=N-2;i>=0;i--)
{
if(a[i]<a[i+1])
return i;
}
return -1;
}
int Arrange(int a[],int i)
{
int j,k,temp;
for(j=i+1;j<N;j++)
for(k=j;k<N;k++)
if(a[j]>a[k])
{
temp=a[j];
a[j]=a[k];
a[k]=temp;
}
return 0;
}