字典序排序問題

思路:
字典序法中,對於數字一、二、3……n的排列,不一樣排列的前後關係是從左到右逐個比較對應的數字的前後來決定的。例如對於5個數字的排列 12354和12345,排列12345在前,排列12354在後。按照這樣的規定,5個數字的全部的排列中最前面的是12345,最後面的是 54321
字典序算法以下:
設P是1~n的一個全排列:p=p1p2……pn=p1p2……pj-1pjpj+1……pk-1pkpk+1……pn
1)從排列的右端開始,找出第一個比右邊數字小的數字的序號j(j從左端開始計算),即 j=max{i|piios

#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int ch[1005];
    int i;
    for(i=1;i<=n;i++)
        cin>>ch[i];
    for(i=n-1;i>=1;i--)
    {
        if(ch[i]<ch[i+1])
           break;
    }
    int min;
    int count=0;
    int t;
    for(int j=i;j<=n;j++)
    {
        if(ch[j]>ch[i])
        {
            if(count==0)
            {
                 min=ch[j];
                 t=j;
                 count=1;
            }
            else
            {
                if(min>ch[j])
                {
                    min=ch[j];
                    t=j;
                }

            }
        }
    }
    int k;
    k=ch[i];
    ch[i]=ch[t];
    ch[t]=k;
    for(int l=i+1,r=n;l<=(n-i-1)/2+i+1;l++,r--)
    {
        int a;
        a=ch[l];
        ch[l]=ch[r];
        ch[r]=a;
    }
    for(int i=1;i<=n;i++)
        cout<<ch[i]<<" ";
    return 0;
}