C实现数字按照字典序排序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一.数组按照字典序排序,使得其中某一个或者某几个数不动,其它数排序。

程序1:对于有4个数的数组,保持其中一个数不动
#include "stdio.h"
#include "stdlib.h"
int n=4;
int AA[4]={0,0,0,0};
int flag[4]={0,0,1,0};//当i=1时,第n-i个数不动
int AB[4]={2,2,3,4};
//寻找下一个数的函数
int NextNum(){
AA[0]++;
for(int i=0;i<n;i++){
if(AA[i]>=AB[i]){
if(i>=n-1)
return(1);
else if(flag[i+1]==1){
if(i+1>=n-1)
return(1);
else{
AA[i+2]++;
AA[i]=0;
i++;
}
}
else {
AA[i+1]++;
AA[i]=0;
}
}
else
break;
}
return(0);
}
main(){
long i;
for( ; ; ){
for(i=3;i>=0;i--)
printf("%2d",AA[i]);
printf("\n");
if(NextNum()==1)
break;
}
}
程序运行结果为:
程序2:对于有6个数的数组,保持其中两个数不动
#include "stdio.h"
#include "stdlib.h"
int n=5;
int AA[5]={0,0,0,0,0};
int flag[5]={0,1,0,1,0};//当i=1时,第n-i个数不动
int AB[5]={2,2,3,3,3};
//寻找下一个数的函数
int NextNum(){
AA[0]++;
for(int i=0;i<n;i++){
if(AA[i]>=AB[i]){
if(i>=n-1)
return(1);
else if(flag[i+1]==1){
if(i+1>=n-1)
return(1);
else{
AA[i+2]++;
AA[i]=0;
i++;
}
}
else {
AA[i+1]++;
AA[i]=0;
}
}
else
break;
}
return(0);
}
main(){
long i;
for( ; ; ){
for(i=n-1;i>=0;i--)
printf("%2d",AA[i]);
printf("\n");
if(NextNum()==1)
break;
}
}
其运行结果为:(复制不好用)
二.实现4个数的字典序全排列
程序:
#include <stdio.h>
#include <stdlib.h>
void output(int n);//输出数组
void swap(int i,int j);//交换
void antsort(int k,int m);//反序
int NextNum(int n);//找出所有全排列int A[4]={1,2,3,4};
void output(int n){
int i;
for(i=0;i<n;i++)
printf("%d", A[i]);
printf("\n");
}
void swap(int i,int j){
int temp;
temp=A[i];
A[i]=A[j];
A[j]=temp;
}
void antsort(int k,int m){
int i,j;
for(i=k,j=m;j>i;i++,j--)swap(i,j); }
int NextNum(int n){
int i,j;
for( ; ; ){
output(n);
for(i=n-2;i>=0;i--) {
if(A[i]<A[i+1])
break;
if(i==0)return 1;
}
for(j=n-1;j>i;j--){
if(A[i]<A[j])break;
}
swap(i,j);
antsort(i+1,n-1);
}
}
main(){
int i,n=4;
NextNum(n);
}
其运行结果为:
求四个数中两个数的组合
程序:
#include "stdio.h"
#include "stdlib.h"
main(){
int A[4]={1,2,3,4};
int i,j;
for(i=0;i<4;i++)
for(j=i+1;j<4;j++){
printf("%2d,%2d",A[i],A[j]);
printf("\n");
}
}
程序运行结果为:。

相关文档
最新文档