㈠ 输入5个数,用冒泡排序的算法将其排序,降序输出具体程序,谢谢
#include<stdio.h>
void main()
{
int a[5];
int i,j,m;
printf("please input five numbers:\n);
for(i=0;i<兄宴5;i++)
scanf("%d",&a[i]);
for(i=0;i<5;i++)
{
for(j=0;j<衡衫5-i;j++)
{
if(a[j]>咐尘腔a[j+1])
{
m=a[j+1];
a[j+1]=a[j];
a[j]=m;
}
}
}
}
㈡ 在C语言中,如何输出一组数的排列组合
#include <stdio.h>
#include <stdlib.h>
int n = 0;
void swap(int *a, int *b)
{
int m;
m = *a;
*a = *b;
*b = m;
}
void perm(int list[], int k, int m)
{
int i;
if(k > m)
{
for(i = 0; i <= m; i++)
printf("%d ", list[i]);
printf(" ");
n++;
}
else
{
for(i = k; i <= m; i++)
{
swap(&list[k], &list[i]);
perm(list, k + 1, m);
swap(&list[k], &list[i]);
}
}
}
int main()
{
int k;//输入自改段然数的个数
printf("请输入连续自然数的个数:");
scanf("%d",&k);
int *list = (int *)malloc(k);
for (int i = 0; i < k; i ++)
{
list[i] = i + 1;
}
// int list[] = {1, 2, 3, 4, 5};
perm(list, 0, k-1);
printf("total:%d
", n);
return 0;
}
该程序的输入为一个任意自然数n,将输出从1到n的全排列。
C语言的基本数的排列法
1、冒泡排序:每次相邻两个数比较,若升序,则将大的数放到后面,一次循环过后,就会将最大的数放在最后。
#include <stdio.h>
int main(void)
{
int a[1001];
int n,i,j,t;
scanf("%d",&n);//n为要排序的数的个数
//输入要排序的数
for(i=0;i<n;++i)
scanf("%d",a+i);
//接下来进行排序
for(i=0;i<n-1;++i)//n个数,总共需要进行n-1次
{ //n-1个数排完,第一个数一定已经归位
//每次会将最大(升序)或最小(降序)放到最后面
for(j=0;j<n-i-1;++j)
{
if(a[j]>a[j+1])//每次冒泡,进行交换
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
for(j=0;j<n;++j)
printf("%-5d ",a[j]);
printf(" ");
}
return 0;
}
2、选择排序:从第一个数开始,每次和后面剩余的数进行比较,若升序,则如果后边的数比当前数字小,进行交换,和后面的所有的数比较、交换后,就会将当前的最小值放在当前的位置。
#include <stdio.h>
int main(void)
{
int a[1001];
int n,i,j,t;
scanf("%d",&n);//n为要排序的数的个数
//输入需要排序的数
for(i=0;i<n;++i)
scanf("%d",a+i);
//接下来进行排序
for(i=0;i<n-1;++i)//因为每碰茄次需要和a[i]后面的数进行比较,所以到a[n-2](倒数第2个元素)就行
{
for(j=i+1;j<n;++j)//j从i后一个开始,a[i]与a[j]进行比较
{
if(a[i]>a[j])//a[i]为当前值,若是比后面的a[j]大,进行交换
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}//每排笑歼察序一次,就会将a[i](包括a[i])之后的最小值放在a[i]的位置
for(j=0;j<n;++j)
printf("%-5d",a[j]);
printf(" ");
}
return 0;
}
㈢ 输入10个数,用冒泡排序法按由小到大顺序排序并输出c语言的
冒泡排序的程序代码如下:
#include<stdio.h>
int main()
{
int a[10]={0};
int i=0,j=0,t=0;
for(i=0;i<10;i++)
{scanf("%d",&a[i]);}
for(i=0;i<10;i++)
{for(j=0;j<10-i;j++){
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}}}
for(i=0;i<10;i++)
{printf("%d ",a[i]);}
return 0;}
任意输入十个数据,程序运行结果:
(3)用冒泡算法排列组合全部打印扩展阅读:
冒泡排序算法的原理如下:
1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2、对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3、针对所有的元素重复以上的步骤,除了最后一个。
4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
㈣ c语言随机输入10个浮点型数据,并排序由高到低,最后将排列在偶数位的数据打印
随机输入10个浮告轮点型数据,并排序由高到低,最后将排列在偶数位的数据打印。这是入门级的编程题目。因为数敏贺据量很小,所以可用,最简单的冒泡排序算法。排序完成以后,再使用循环把排桥友派列在偶数位的数据打印出来。
㈤ 编写一个函数模板,使用冒泡排序将数组内容由小到大排列并打印出来,并写出调用此函
模板函数里的参数是形式参数,就是一个数组,如 (int a[])
㈥ 用java程序冒泡排序算法把一组打乱顺序的数字从小到大排列并打印出来
publicclassMaoPao
{
publicstaticvoidmain(Stringargs[])
{
int[]arr={2,1,3,4,6,5,7,8,9,0,10};
//N是数组的元素个数,这样无论多少个数,直接修改arr中的元素就行了,
//不需要调整循环次数
intN=arr.length;
inttemp=0;
//冒泡排序:每次把最大的放到最后,N-i是因为第i次排序之后,
//数组arr的最后i个数已经是按照大小顺序的了,所以不需要再排序了
//比如第一次排序之后,最后一个数肯定是最大的,下一次只需要排前9个就行了。
for(inti=1;i<N;++i)
{
for(intj=0;j<N-i;++j)
{
//如果前面的数比后面的大,则不是按照顺序的,因此要交换
if(arr[j]>arr[j+1])
{
temp=arr[j];//交换2个数
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
for(inti=0;i<N;++i)//输出排序后的结果
{
System.out.print(arr[i]+"");
}
}
}
忘采纳。
㈦ 用冒泡排序法对数组int【10】进行从大到小排序,并按照从大到小打印出来。(使用printf函数),c语言的
#include<stdio.h>
int a[10];
int main()
{
int i,j,n,t;
scanf("%d",&n);
for (i=1;i<=n;i++)
scanf("%d",&a[i]);
for (i=1;i<纤前返毁饥n;i++)
for (j=n;j>i;j--)
if (a[j]<a[j-1])
{
t=a[j];a[j]=a[j-1];a[j-1]=t;
}
for (i=1;i<悔瞎=n;i++)
printf("%d ",a[i]);
}
㈧ C语言打印一窜数字的所有组合
1.楼主的数太多了,我的机器有点落伍,显示的时间有点漫长~~~~,我把数改成了1,2,3,3,4,7,7。显示上也简单点,原理是一样的。。。另外不是很清楚楼主的所有组合是不是包括取出一部分字符串做排列组合,我弄的是所有
数字用上的全排列,就是没有12,13这样的组合数,楼主如果是需要显示这样的数,只要在主函数中做循环,分别取出1至7个数漏渗颤再运行deal和排列函数就行(注,调试环境是VC++6.0)
#include "stdio.h"
#include "stdlib.h"
#define NUM 30
#define N 7 //数组元素个数
static int cnt=0;//用于记录重复数字的个数
void print(int n,int arr[]){
int i;
static int count=0;
printf("%d:",++count);
for(i=0;i<n;i++)
printf("%d",arr[i]);
printf("\t");
if(count%5==0)
printf("\n");
}
void arrange(int size,int arr[],int p){
//算法思想:采用经典回溯法,先喊或确定第一个位置,再对余下的n-1位数字做全排列
//每组全排列后均把所有参与此次全排列的数与这次全排列的第一个数交换后再重复排列
//返败例如递归到排列1234后回溯一次即排列34,将4与3交换,再回溯至排列234分别将34与2交换后排列
//直至排列完成后,再分别将234与1交换后排列
//不过算法效率在数字过大后就比较低下了,楼主可以去网上找找更高效的算法
int i,temp;
if(p+1==size){//排列完成后打印
print(size,arr);
return;
}
for(i=p;i<size;i++){//交换
temp=arr[p];
arr[p]=arr[i];
arr[i]=temp;
arrange(size,arr,p+1);//递归调用排列
temp=arr[p];
arr[p]=arr[i];
arr[i]=temp;
}
}
void deal(int a[],int b[]){
//将重复数字去掉,方便全排列
int i,j;
for(i=0;i<N;i++){
if(a[i]>0){
for(j=i+1;j<N;j++){
if(a[i]==a[j]){
a[j]=-1;//重复标志
cnt++;
}
}
}
}
j=0;
for(i=0;i<=N;i++){
if(a[i]>0){
b[j++]=a[i];
}
}
}
void main(){
int a[N]={1,2,3,3,4,7,7};
int b[NUM];
deal(a,b);//处理数组
arrange(N-cnt,b,0);//排列输出
}
2.和第一问一样,我只选了1,2,3,3,4,7,7。程序上只是打印函数改了下,deal函数做了调整,本来想在第一问的排列基础上再在特定的位置上插入3和7,后来发现会重复,做了很久的无用功啊。。print中的循环太多了,看起来有点累,不过主要的就是两个大的东西,两个循环实际是一样的原理,楼主有兴趣可试着把循环换成一个函数,可读性会强点。下面的代码适用性还是很广的。
#include "stdio.h"
#include "stdlib.h"
#define NUM 30
#define N 7
static int cnt=0;//用于记录重复数字的个数
static int t[N];//用于记录重复数字
void print(int n,int arr[]){
//算法思想:对有重复的数字组合排列,将它看成是对空余位置填充数字
//先将重复的数字进行填充,即在空余位置中取定重复数的位置,再对余下的位置进x行全排列填充
//按此思想得到的个数为 =1260个
int a1[N-2],a2[N];
static int count=0;
for(int i=0;i<N-cnt/2-1;i++){
//取5个数,包括完全没重复的数再加上重复的数(例如:1,2,4,3,3)
//对这5个数按照算法思想排列
a1[i]=t[0];
for(int j=i+1;j<=N-cnt/2-1;j++){
a1[j]=t[0];
for(int k=0;k<i;k++)
a1[k]=arr[k];
for(int m=i+1;m<j;m++)
a1[m]=arr[m-1];
for(int p=j+1;p<N-cnt/2;p++)
a1[p]=arr[p-2];
for(int s=0;s<N-1;s++){//将7个数取出按照算法排列
a2[s]=t[1];
for(int r=s+1;r<=N-1;r++){
a2[r]=t[1];
for(int y=0;y<s;y++)
a2[y]=a1[y];
for(int x=s+1;x<r;x++)
a2[x]=a1[x-1];
for(int h=r+1;h<N;h++)
a2[h]=a1[h-2];
printf("%d:",++count);
for(int c=0;c<N;c++)//将该排列打印出来
printf("%d",a2[c]);
printf("\t");
if(count%5==0)
printf("\n");
}
}
}
}
}
void arrange(int size,int arr[],int p){
int i,temp;
if(p+1==size){//排列完成后打印
print(size,arr);
return;
}
for(i=p;i<size;i++){//交换
temp=arr[p];
arr[p]=arr[i];
arr[i]=temp;
arrange(size,arr,p+1);//递归调用排列
temp=arr[p];
arr[p]=arr[i];
arr[i]=temp;
}
}
void deal(int a[],int b[]){
//将数组处理成只剩不重复排列的数
int i,j,k=0;
for(i=0;i<N;i++){
if(a[i]>0){
for(j=i+1;j<N;j++){
if(a[i]==a[j]){
t[k++]=a[i];//记录重复数
a[i]=-1;
a[j]=-1;
cnt+=2;
}
}
}
}
j=0;
for(i=0;i<=N;i++){
if(a[i]>0){
b[j++]=a[i];
}
}
}
void main(){
int a[N]={1,2,3,3,4,7,7};
int b[NUM];
deal(a,b);//处理数组
arrange(N-cnt,b,0);//排列输出
}
3.第三问比较简单,在第二问打印程序上加上限制条件(即第三位不能是3,第七位不能是七)
#include "stdio.h"
#include "stdlib.h"
#define NUM 30
#define N 7
static int cnt=0;//用于记录重复数字的个数
static int t[N];//用于记录重复数字
void print(int n,int arr[]){
int a1[N-2],a2[N];
static int count=0;
for(int i=0;i<N-cnt/2-1;i++){
a1[i]=t[0];
for(int j=i+1;j<=N-cnt/2-1;j++){
a1[j]=t[0];
for(int k=0;k<i;k++)
a1[k]=arr[k];
for(int m=i+1;m<j;m++)
a1[m]=arr[m-1];
for(int p=j+1;p<N-cnt/2;p++)
a1[p]=arr[p-2];
for(int s=0;s<N-1;s++){
a2[s]=t[1];
for(int r=s+1;r<=N-1;r++){
a2[r]=t[1];
for(int y=0;y<s;y++)
a2[y]=a1[y];
for(int x=s+1;x<r;x++)
a2[x]=a1[x-1];
for(int h=r+1;h<N;h++)
a2[h]=a1[h-2];
if(a2[2]!=t[0]&&a2[6]!=t[1]){
printf("%d:",++count);
for(int c=0;c<N;c++)
printf("%d",a2[c]);
printf("\t");
if(count%5==0)
printf("\n");
}
}
}
}
}
}
void arrange(int size,int arr[],int p){
int i,temp;
if(p+1==size){//排列完成后打印
print(size,arr);
return;
}
for(i=p;i<size;i++){//交换
temp=arr[p];
arr[p]=arr[i];
arr[i]=temp;
arrange(size,arr,p+1);//递归调用排列
temp=arr[p];
arr[p]=arr[i];
arr[i]=temp;
}
}
void deal(int a[],int b[]){
//将数组处理成只剩不重复排列的数
int i,j,k=0;
for(i=0;i<N;i++){
if(a[i]>0){
for(j=i+1;j<N;j++){
if(a[i]==a[j]){
t[k++]=a[i];//记录重复数
a[i]=-1;
a[j]=-1;
cnt+=2;
}
}
}
}
j=0;
for(i=0;i<=N;i++){
if(a[i]>0){
b[j++]=a[i];
}
}
}
void main(){
int a[N]={1,2,3,3,4,7,7};
int b[NUM];
deal(a,b);//处理数组
arrange(N-cnt,b,0);//排列输出
}
㈨ c语言中用冒泡排序法排列任意输入的10个数,用程序输出从小到大的排列具体过程,谢谢。。
可以试试这样写!举前察悔皮!!
#include<stdio.h>
#define N 10
void main()
{
int i,a[N],t=0,j=0;
for(i=0;i<正茄N;i++)
scanf("%d",&a[i]);
for(i=0;i<N-1;i++)
for(j=0;j<N-1-i;j++)
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
for(i=0;i<N;i++)
printf("%5d",a[i]);
}
㈩ 数组int]arr={4,8,9,10,2,6};+使用冒泡排序,让arr从小到大排列,并打印
代码庆衫并誉迹如下:
```
int[] arr = {4, 8, 9, 10, 2, 6};
int temp;
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "塌洞 ");
}
```
输出结果为:2 4 6 8 9 10