『壹』 c语言简单排序

//希望我的回答对你的学习有帮助
//第一题
#include<stdio.h>
voidmain()
{
inti,j,t1,t2;
inta[10],b[10];
for(i=0,j=1;i<10;i++,j++)
{
scanf("%d",&a[i]);
b[i]=j;
}
for(intk=0;k<10;k++)
for(intl=k+1;l<=9;l++)
{
if(a[k]>a[l])
{
t1=a[l];a[l]=a[k];a[k]=t1;
t2=b[l];b[l]=b[k];b[k]=t2;
}
}
for(i=0;i<10;i++)
{
printf("%d",a[i]);
if(i<9)
printf("");
}
printf(" ");
for(i=0;i<10;i++)
{
printf("%d",b[i]);
if(i<9)printf("");
}
printf(" ");
}

『贰』 C语言数组排列怎么做

对n个数排序,先输入,再输入n个数。
选择排序
#include<stdio.h>
int main()
{
int a[100];
int i,j,t,p,n;
while (~scanf("%d",&n))
{
for (i=0;i<n;i++)
scanf("%d",&a[i]);

for (i=0;i<n-1;i++)
{
p=i;
for (j=i+1;j<n;j++)
if (a[p]>a[j])
p=j;

if (p!=j)
{
t=a[p];a[p]=a[i];a[i]=t;
}
}
for (i=0;i<n;i++)
if (i!=n-1)
printf("%d ",a[i]);
else
printf("%d\n",a[i]);

}

return 0;
}

冒泡排序
#include<stdio.h>
int main()
{
int i,j,t,n;int a[1000];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(j=0;j<(n-1);j++)
for(i=0;i<(n-1)-j;i++)
if(a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
for(i=0;i<n;i++)
{
if (i!=n-1)
printf("%d ",a[i]);
else
printf("%d\n",a[i]);
}

return 0;
}

『叁』 c语言求全排列

用迭代算法简单些, 就是速度慢许.

算法为:
为求1 ~ n个整数的函数 permutation,
* 如果n = 2, 只有两种排列方式, 即 (1, 2) (2, 1)
* 迭代计算专1 ~ n-1个整数的全属排列
* 将n插入所得到的1 ~ n-1的全排列的任意位置得到1 ~ n的全排列.

『肆』 c语言排列问题

下面是C语言里面常用的三种排序方法,但愿对楼主有帮助,一、冒泡法(起泡法)算法要求:用起泡法对10个整数按升序排序。算法分析:如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次相邻元素的两两比较,在第j趟比较中要进行n-j次两两比较。比较的顺序从前往后,经过一趟比较后,将最值沉底(换到最后一个元素位置),最大值沉底为升序,最小值沉底为降序。算法源代码: # include main() { int a[10],i,j,t; printf("Please input 10 numbers: "); /*输入源数据*/ for(i=0;i<10;i++) scanf("%d",&a[i]); /*排序*/ for(j=0;j<9;j++) /*外循环控制排序趟数,n个数排n-1趟*/ for(i=0;i*内循环每趟比较的次数,第j趟比较n-j次*/ if(a[i]>a[i+1]) /*相邻元素比较,逆序则交换*/ { t=a[i]; a[i]=a[i+1]; a[i+1]=t; } /*输出排序结果*/ printf("The sorted numbers: "); for(i=0;i<10;i++) printf("%d ",a[i]); printf("\n"); } 算法特点:相邻元素两两比较,每趟将最值沉底即可确定一个数在结果的位置,确定元素位置的顺序是从后往前,其余元素可能作相对位置的调整。可以进行升序或降序排序。算法分析:定义n-1次循环,每个数字比较n-j次,比较前一个数和后一个数的大小。然后交换顺序。二、选择法算法要求:用选择法对10个整数按降序排序。算法分析:每趟选出一个最值和无序序列的第一个数交换,n个数共选n-1趟。第i趟假设i为最值下标,然后将最值和i+1至最后一个数比较,找出最值的下标,若最值下标不为初设值,则将最值元素和下标为i的元素交换。算法源代码: # include main() { int a[10],i,j,k,t,n=10; printf("Please input 10 numbers:"); for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=0;i main() { int a[10],i,j,t; printf("Please input 10 numbers: "); for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=1;i*外循环控制趟数,n个数从第2个数开始到最后共进行n-1次插入*/ { t=a[i]; /*将待插入数暂存于变量t中*/ for( j=i-1 ; j>=0 && t>a[j] ; j-- ) /*在有序序列(下标0 ~ i-1)中寻找插入位置*/ a[j+1]=a[j]; /*若未找到插入位置,则当前元素后移一个位置*/ a[j+1]=t; /*找到插入位置,完成插入*/ } printf("The sorted numbers: "); for(i=0;i<10;i++) printf("%d ",a[i]); printf("\n"); } 算法特点:每趟从无序序列中取出第一个数插入到有序序列的合适位置,元素的最终位置在最后一趟插入后才能确定位置。也可是先用循环查找插入位置(可从前往后或从后往前),再将插入位置之后的元素(有序列中)逐个后移一个位置,最后完成插入。该算法的特点是在寻找插入位置的同时完成元素的移动。因为元素的移动必须从后往前,则可将两个操作结合在一起完成,提高算法效率。仍可进行升序或降序排序。二、下面是三种排序的概念及其优缺点冒泡排序已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。首先比较a[1]与a[2]的值,若a[1]大于a[2]则交换两者的值,否则不变。再比较a[2]与a[3]的值,若a[2]大于a[3]则交换两者的值,否则不变。再比较a[3]与a[4],依此类推,最后比较a[n-1]与a[n]的值。这样处理一轮后,a[n]的值一定是这组数据中最大的。再对a[1]~a[n-1]以相同方法处理一轮,则a[n-1]的值一定是a[1]~a[n-1]中最大的。再对a[1]~a[n-2]以相同方法处理一轮,依此类推。共处理n-1轮后a[1]、a[2]、……a[n]就以升序排列了。优点:稳定,比较次数已知;缺点:慢,每次只能移动相邻两个数据,移动数据的次数多。选择排序已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。首先比较a[1]与a[2]的值,若a[1]大于a[2]则交换两者的值,否则不变。再比较a[1]与a[3]的值,若a[1]大于a[3]则交换两者的值,否则不变。再比较a[1]与a[4],依此类推,最后比较a[1]与a[n]的值。这样处理一轮后,a[1]的值一定是这组数据中最小的。再将a[2]与a[3]~a[n]以相同方法比较一轮,则a[2]的值一定是a[2]~a[n]中最小的。再将a[3]与a[4]~a[n]以相同方法比较一轮,依此类推。共处理n-1轮后a[1]、a[2]、……a[n]就以升序排列了。优点:稳定,比较次数与冒泡排序一样,数据移动次数比冒泡排序少;缺点:相对之下还是慢。插入排序已知一组升序排列数据a[1]、a[2]、……a[n],一组无序数据b[1]、b[2]、……b[m],需将二者合并成一个升序数列。首先比较b[1]与a[1]的值,若b[1]大于a[1],则跳过,比较b[1]与a[2]的值,若b[1]仍然大于a[2],则继续跳过,直到b[1]小于a数组中某一数据a[x],则将a[x]~a[n]分别向后移动一位,将b[1]插入到原来a[x]的位置这就完成了b[1]的插入。b[2]~b[m]用相同方法插入。(若无数组a,可将b[1]当作n=1的数组a)优点:稳定,快;缺点:比较次数不一定,比较次数越少,插入点后的数据移动越多,特别是当数据总量庞大的时候,但用链表可以解决这个问题。

『伍』 c语言的两种排序

1、选择排序法

要求输入10个整数,从大到小排序输出

输入:2 0 3 -4 8 9 5 1 7 6

输出:9 8 7 6 5 3 2 1 0 -4

代码:

#include&lt;stdio.h&gt;

int main(int argc,const char*argv[]){

int num[10],i,j,k,l,temp;

//用一个数组保存输入的数据

for(i=0;i&lt;=9;i++)

{

scanf("%d",&num&lt;i&gt;);

}

//用两个for嵌套循环来进行数据大小比较进行排序

for(j=0;j&lt;9;j++)

{

for(k=j+1;k&lt;=9;k++)

{

if(num[j]&lt;num[k])//num[j]&lt;num[k]

{

temp=num[j];

num[j]=num[k];

num[k]=temp;

}

}

}

//用一个for循环来输出数组中排序好的数据

for(l=0;l&lt;=9;l++)

{

printf("%d",num[l]);

}

return 0;

}

2、冒泡排序法

要求输入10个整数,从大到小排序输出

输入:2 0 3-4 8 9 5 1 7 6

输出:9 8 7 6 5 3 2 1 0-4

代码:

#include&lt;stdio.h&gt;

int main(int argc,const char*argv[]){

//用一个数组来存数据

int num[10],i,j,k,l,temp;

//用for来把数据一个一个读取进来

for(i=0;i&lt;=9;i++)

{

scanf("%d",&num&lt;i&gt;);

}

//用两次层for循环来比较数据,进行冒泡

for(j=0;j&lt;9;j++)

{

for(k=0;k&lt;9-j;k++)

{

if(num[k]&lt;num[k+1])//num[k]&lt;num[k+1]

{

temp=num[k];

num[k]=num[k+1];

num[k+1]=temp;

}

}

}

//用一个for循环来输出数组中排序好的数据

for(l=0;l&lt;=9;l++)

{

printf("%d",num[l]);

}

return 0;

}

(5)c语言排列扩展阅读:

return 0代表程序正常退出。return是C++预定义的语句,它提供了终止函数执行的一种方式。当return语句提供了一个值时,这个值就成为函数的返回值。

return语句用来结束循环,或返回一个函数的值。

1、return 0,说明程序正常退出,返回到主程序继续往下执行。

2、return 1,说明程序异常退出,返回主调函数来处理,继续往下执行。return 0或return 1对程序执行的顺序没有影响,只是大家习惯于使用return(0)退出子程序而已。

『陆』 C语言排列组合中的排列用函数怎么写

longlongpermutation(intm,intn)
{
inti;
longlongresult=1;

for(i=m;i>m-n;i--)
result*=i;

returnresult;
}

这个函数计算A(n,m),即n(n-1)(n-2)……(n-m+1)

『柒』 c语言排序

#include<stdio.h>
typedef struct student{
int grade;
int score[3];
double ave;
}STU;
int main()
{
int i,j,n;
double sum,ave[300];
STU s[300],t,k;
scanf("%d",&n);
for(i=0;i<n;i++)
{
sum=0.0;
scanf("%d",&s[i].grade);
for(j=0;j<3;j++)
{
scanf("%d",&s[i].score[j]);
sum=sum+s[i].score[j];
}
s[i].ave=sum/3;
}
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
{
if(s[i].ave<s[j].ave)
{
t=s[i];
s[i]=s[j];
s[j]=t;
}
if(s[i].ave==s[j].ave)
if(s[i].grade>s[j].grade)
{
k=s[i];
s[i]=s[j];
s[j]=k;
}
}
for(i=0;i<n;i++)
{
printf("%d ",s[i].grade);
for(j=0;j<2;j++)
printf("%d ",s[i].score[j]);
printf("%d\n",s[i].score[2]);
}
return 0;
}

『捌』 C语言怎么实现排列

#defineSWAP(a,b,type){typetmp;tmp=a;a=b;b=tmp;}
staticvoid_comb(char*w,int*num,intn,intt,intrn,char*res){
inti;
for(i=0;i<n;i++){
[rn++]=w[i];
num[i]--;
if(num[i]==0){
if(rn==t){
res[rn]=0;
printf("%s ",res);
}
else{
SWAP(w[0],w[i],char);
SWAP(num[0],num[i],int);
_comb(w+1,num+1,n-1,t,rn,res);
SWAP(w[0],w[i],char);
SWAP(num[0],num[i],int);
}
}
else{
_comb(w,num,n,t,rn,res);
}
rn--;
num[i]++;
}
}
voidcomb(char*w,int*num,intn,intt,char*res){
_comb(w,num,n,t,0,res);
}
intmain()
{
charw[]="10";
intn[]={3,3};
charres[7];
comb(w,n,2,6,res);
return0;
}

『玖』 c语言编程排列组合

void Show(int n,int len ,char str[], char p[],int *i){/*函数功能说明: 密码穷举法 递归算法参数说明:len 密码可选元素的个数,实际等于 strlen(str); n 密码位数。 STR[]密码表。 *p 密码排列组合的临时存档*/int a;n--;for(a=0; a < len; a++){p[n]=str[a]; if(n==0)printf("%d:%s ",(*i)++,p); if(n0)Show(n,len , str,p,i);}} /*驱动程序 用于测试*/ int main(void){char str[]="abcdef";//密码表 可选元素集合可根据选择修改 int n=4;//密码位数,根据具体应用而定。 int len=strlen(str);//用于密码元素集合计数。 char p[20];//存放排列组合的密码,用于输出。 int num=0;//存放统计个数的整数值, int *i=&num;//计数器 地址。 p[n]='\0';//这个不用说啦。 printf("\n%d 位密码,每个密码有%d个选择的话,共有:%d个组合。\n",n,len,*i);return 0;}
以上回答你满意么?

『拾』 C语言 排列

charstring[N][9];
intnum=0,j,strNum[N][9];
voidsort(intarray[],intn)
{
inttmp,i,j;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(array[i]>=array[j])
{
tmp=array[i];
array[i]=array[j];
array[j]=tmp;
}
}
}
}
voidfunc(charx[],inty,intz)
{
inta,cnt=0;
for(a=0;a<y;a++)
{
strNum[z][a]=x[a]-'0';
}
sort(strNum[num],9);
for(a=0;a<y;a++)
{
if(strNum[z][a]==(a+1))
{
cnt++;
}
}
if(cnt==y)
{
for(a=0;a<9;a++)
{

if(a==2||a==5)
{
printf("%c",string[num][a]);
}
else
{
printf("%c",string[num][a]);
}
}
printf(" ");
}
}
voidmain()
{
for(i=1;i<=9;i++)
{
for(j=1;j<=9;j++)
{
for(k=1;k<=9;k++)
{
if(i!=j&&j!=k&&i!=k)
{
sprintf(string[num],"%d%d%d",100*i+10*j+k,2*(100*i+10*j+k),3*(100*i+10*j+k));
func(string[num],9,num);
num++;
}
}

}
}
}