题面:按照字典序输出自然数 1 到 n 所有不重复的排列,即 n 的全排列,要求所产生的任一数字序列中不允许出现重复的数字
不使用递归的方法:
#include <stdio.h>
#define MAXLEN 1000
void swap(int list[],int i,int j);
void initialize_list(int list[],int n);
void print_list(int list[],int n);
void sort(int list[],int m,int n);
int exchange(int list[],int n);
int main(){
int list[MAXLEN];
int n;
scanf("%d\n",&n);
int m=0;
initialize_list(list,n);
do{
sort(list,m+1,n);
print_list(list,n);
}while((m=exchange(list,n))!=-1);
return 0;
}
void initialize_list(int list[],int n){
for(int i=0;i<n;i++)
list[i]=i+1;
list[n]=-1;
}
void print_list(int list[],int n){
for(int i=0;i<n;i++)
printf("%d ",list[i]);
printf("\n");
}
void swap(int list[],int i,int j){
int temp=list[i];
list[i]=list[j];
list[j]=temp;
}
void sort(int list[],int m,int n){
for(int i=m;i<n;i++){
for(int j=i+1;j<n;j++){
if(list[i]>list[j])
swap(list,i,j);
}
}
}
int exchange(int list[],int n){
for(int k=n-2;k>=0;k--){
for(int i=n-1;i>=k;i--){
for(int j=i-1;j>=k;j--){
if(list[i]>list[j]){
swap(list,i,j);
return j;
}
}
}
}
return -1;
}
959

被折叠的 条评论
为什么被折叠?



