求问:带有重复元素全排列怎么按字典序输出啊

该代码最后输出时候不是字典序,比如1 2 3就不是字典序
#include
using namespace std;
void Allc(char ary[],int,int);
bool judge(char ary[],int,int);
inline void Swap(char &x,char &y);
int count=0;
int main(){
int i,j,n;
char a[501],t;
cin>>n;
for(i=1;i<=n;i++) cin>>a[i];
for(i=1;i for(j=1;j if(a[j]>a[j+1]){
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
Allc(a,1,n);
cout< return 0;
}
void Allc(char ary[],int l,int r){
if(l==r){
count++;
for(int i=1;i cout return;
}
int i,j;
for(i=l;i if(judge(ary,l,i)){
Swap(ary[i],ary[l]);
Allc(ary,l+1,r);
Swap(ary[i],ary[l]);
}
}
}
inline void Swap(char &x,char &y){
char temp=x;
x=y;
y=temp;
}
bool judge(char ary[],int x,int y){
int i,j;
if(y>x){
for(j=x;j<y;j++)
if(ary[j]==ary[y]) return false;
}
return true;
}

这样写试试看
#include
using namespace std;
void Allc(char ary[],int,int);
bool judge(char ary[],int,int);
inline void Swap(char &x,char &y);
int count=0;
int main(){
int i,j,n;
char a[501],t;
cin>>n;
for(i=1;i<=n;i++) cin>>a[i];
for(i=1;i for(j=1;j if(a[j]>a[j+1]){
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
Allc(a,1,n);
cout< < return 0;
}
void Allc(char ary[],int l,int r){
if(l==r){
count++;
for(int i=1;i cout return;
}
int i,j;
for(i=l;i if(judge(ary,l,i)){
Swap(ary[i],ary[l]);
Allc(ary,l+1,r);
Swap(ary[i],ary[l]);
}
}
}
inline void Swap(char &x,char &y){
char temp=x;
x=y;
y=temp;
}
bool judge(char ary[],int x,int y){
int i,j;
if(y>x){
for(j=x;j<y;j++)
if(ary[j]==ary[y]) return false;
}
return true;
}

代码太乱
for(i=1;i for(j=1;j if(a[j]>a[j+1]){
这里根本都不对

参考这个:https://blog.csdn.net/sinat_36215255/article/details/78197129

代码一定要贴正确,问题回答了一定要采纳。请注意你的行为规范