C语言四个数从小到大排序

作者&投稿:柏法 (若有异议请与网页底部的电邮联系)
C语言四个数从小到大排列的程序~

汗,。。。。。任意一本家才上都有 什么冒泡 选择 插入排序都是啊

、排序算法
(1)分析
因为每一趟排序都使有序区增加了一个气泡,在经过n-1趟排序之后,有序区中就有n-1个气泡,而无序区中气泡的重量总是大于等于有序区中气泡的重量,所以整个冒泡排序过程至多需要进行n-1趟排序。
若在某一趟排序中未发现气泡位置的交换,则说明待排序的无序区中所有气泡均满足轻者在上,重者在下的原则,因此,冒泡排序过程可在此趟排序后终止。为此,在下面给出的算法中,引入一个布尔量exchange,在每趟排序开始前,先将其置为FALSE。若排序过程中发生了交换,则将其置为TRUE。各趟排序结束时检查exchange,若未曾发生过交换则终止算法,不再进行下一趟排序。

(2)具体算法
void BubbleSort(SeqList R)
{ //R(l..n)是待排序的文件,采用自下向上扫描,对R做冒泡排序
int i,j;
Boolean exchange; //交换标志
for(i=1;i<n;i++){ //最多做n-1趟排序
exchange=FALSE; //本趟排序开始前,交换标志应为假
for(j=n-1;j>=i;j--) //对当前无序区R[i..n]自下向上扫描
if(R[j+1].key<R[j].key){//交换记录
R[0]=R[j+1]; //R[0]不是哨兵,仅做暂存单元
R[j+1]=R[j];
R[j]=R[0];
exchange=TRUE; //发生了交换,故将交换标志置为真
}
if(!exchange) //本趟排序未发生交换,提前终止算法
return;
} //endfor(外循环)
} //BubbleSort
4、算法分析
(1)算法的最好时间复杂度
若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数C和记录移动次数M均达到最小值:
Cmin=n-1
Mmin=0。
冒泡排序最好的时间复杂度为O(n)。

(2)算法的最坏时间复杂度
若初始文件是反序的,需要进行n-1趟排序。每趟排序要进行n-i次关键字的比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值:
Cmax=n(n-1)/2=O(n2)
Mmax=3n(n-1)/2=O(n2)
冒泡排序的最坏时间复杂度为O(n2)。

(3)算法的平均时间复杂度为O(n2)
虽然冒泡排序不一定要进行n-1趟,但由于它的记录移动次数较多,故平均时间性能比直接插入排序要差得多。

(4)算法稳定性
冒泡排序是就地排序,且它是稳定的。

#include
int main()
{
int a[3],i,j,t;
printf("请输入3个整数:");
for(i=0;i<3;i++)
scanf("%d",&a[i]);
for(i=0;i<2;i++)//冒泡排序
for(j=0;j<2-i;j++)
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=;
}
printf("从小到大的三个数:");
for(i=0;i<3;i++)
printf("%d ",a[i]);
printf("
");
return 0;
}

# include <stdio.h>void main (){   int t,a,b,c,d;   printf("请输入4个数;");   

scanf("%d,%d,%d,%d",&a,&b,&c,&d); 

printf("a=%d,b=%d,c=%d,d=%d
",a,b,c,d);  

if(a>b)      {t=a;a=b;b=t;} if(a>b)      {t=a;a=b;b=t;}}                                         



#include<stdio.h>
void main()
{
int a,b,c,d,e;
printf("请分别输入四个数:\n");
scanf("%d%d%d%d",&a,&b,&c,&d);
printf("原顺序: %d %d %d %d\n",a,b,c,d);
if(a<b)
{
e=a;
a=b;
b=e;
}
if(a<c)
{
e=a;
a=c;
c=e;
}
if(a<d)
{
e=a;
a=d;
d=e;
}
if(b<c)
{
e=b;
b=c;
c=e;
}
if(b<d)
{
e=b;
b=d;
d=e;
}
if(c<d)
{
e=c;
c=d;
d=e;
}
printf("按小到大排序 %d %d %d %d\n",d,c,b,a);
}
看看复合吗
a中永远是最大值 b是老二 c是老三 d是老四
这是程序的思路

这个是昨天写的3个数从大到小,4个数的就不扩展了~
void Sort()
{
int x,y,z;
printf("Pls input three numbers(x,y,z):\n");
scanf("%d,%d,%d",&x,&y,&z);
if(x<=y)
{
//switch the x,y
//tmp = x;
//x = y;
//y = tmp;
if (z>=y)
printf("\nThe sequence is %d,%d,%d",x,y,z);
else
if(z>=x)
printf("\nThe sequence is %d,%d,%d",x,z,y);
else
printf("\nThe sequence is %d,%d,%d",z,x,y);
}
else
if(z>=x)
printf("\nThe sequence is %d,%d,%d",y,x,z);
else
if (z>=y)
printf("\nThe sequence is %d,%d,%d",y,z,x);
else
printf("\nThe sequence is %d,%d,%d",z,y,x);
}

给你个参考 这个是排3个数字大小的 if语句排列

#include "stdafx.h"

int main(int argc, char* argv[])
{
int a,b,c;
int temp;

scanf("a=%d b=%d c=%d",&a,&b,&c); //输入的时候按a= b= c= 输入

if(a>b)
{
temp=a;

a=b;

b=temp;

}

if(b>c)

{
temp=b;

b=c;

c=temp;
}

if(a>b)

{

temp=a;

a=b;

b=temp;

}

printf("a=%d,b=%d,c=%d\n",a,b,c);

return 0;

}

楼上的回答都挺到位了呀,难道还有错?


C语言简单程序:输入四个数,按从小到大顺序输出
你好,你的代码有两处错误:首先定义数组时长度过小,你要对4个数排序所以数组的长度至少要为4。其次你对四个整数排序的算法错误,建议用冒泡法进行排序。下面是我在你的代码基础上改进过后的代码,在改动处我已作了注释,希望对你有帮助!include"stdio.h"void main(){int a[4],i,j,t; \/\/...

4个数比较大小,结果从小到大排列,用C语言if语句怎么编?
算法上没错,能得到想要的结果,这就是冒泡算法。在用scanf变量输入时要给他变量地址,用取地址符:&,如int a; scanf(''a=%d'',&a);

C语言编程 1、输入四个数,将四个数分别从小到大、从大到小排序后进行...
include<stdio.h> main(){ FILE *fin,*fout;fin=fopen("maopao!.in","r");fout=fopen("maopao!.out","w");int i,j,t;int a[10];for(i=0;i<10;i++)fscanf(fin,"%d",&a[i]);fprintf(fout,"\\n");for(j=0;j<9;j++)for(i=0;i<9-j;i++)if(a[i]>a[i+1])...

C语言中的“把abcd四个整数按从小到大的顺序排列后输出”问题_百度知 ...
解释下那个IF语句就是判断,这样看,以第一句为例,如果a大于b,那么那个temp就是a,也就是最大的,然后a就变成b,也就变小了,这时候,b=temp,就是把b变成他们两个中间最大的,其他部分以此类推,看到最后是这样输出顺序:a,b,c,d并且是从小到大,你就明白了为什么这样做了 一般temp表示我...

C语言问题,求四个整数的最大值并且从小到大排列,运行结果为什么会是这样...
这是你的scanf函数的写法问题导致的:scanf("%d,%d,%d,%d", &a, &b, &c, &d);这种写法,注意"%d,%d,%d,%d",每个占位符之间有“,”分割,所以你输入的时候,需要用相同的分割符(这里是“,”)隔开需要输入的数字。如果你没有按照“,”分割输入,而是用空格或回车分割输入,就会出现读取的...

C语言,想通过这样将四个数按从小到大排序,行否??编译未成功
冒泡排序法,不知道是不是你的意思,这个程序可以运行。include<stdio.h> void main(){ int a[4];int i,j,temp;for(i=0;i<4;i++)scanf("%d",&a[i]);for(j=0;j<3;j++)for(i=0;i<3-j;i++){ if(a[i]>a[i+1]){ temp=a[i];a[i]=a[i+1];a[i+1]=temp;} }...

我是为了用c语言指针实现 输入4个整数\/字符串,按从小到大的顺序输出...
input函数中调用deal函数有问题,应将 char *deal (char *a1,char *a2,char *a3,char *a4);改为deal(a1,a2,a3,a4).另外,由于你把指针p设为全局指针变量,故deal函数不需要返回指针类型的变量

c语言怎么输出从小到大的数?
C语言程序如下:include<stdio.h> intmain(){ inta,b,c,t;printf("请输入三个数:");scanf("%d%d%d",&a,&b,&c);if(a>b){ t=a;a=b;b=t;} if(a>c){ t=a;a=c;c=t;} if(b>c){ t=b;b=c;c=t;} printf("从小到大的顺序是:%d %d %d\\n",a,b,c);return0;} ...

用C语言编程:输入5个数,按从小到大顺序输出!?
分别放在数组成员a[0]到a[4]中 for(i=5;i>0;i--)\/\/冒泡排序 for(j=0;ja[j+1]){ temp=a[j];a[j]=a[j+1];a[j+1]=temp;} } printf("output:\\n");for(i=0;i<5;i++) printf("%d\\n",a[i]);\/\/从小到大顺序输出 return 0;} ...

c语言:输入4个数求里面第二大的数(求教自己想了很久没想通小白一个)
int main(void) { int num[4];\/\/ 声明一个数组,保存4个元素 int i = 0, j = 0; for (; i < 4; ++i) { scanf ("%d", &num[i]); for (j = i; j > 0; --j) { \/\/ 这里读入了一个数据,进行插入排序;判断读入的数据如果比之前的大,则移动到数组前面 ...

长治市13472694640: 四个整数,按顺序从小到大排列 c语言 -
坚伟哈力: #include<stdio.h> void main() {int a,b,c,d,x; scanf("%d%d%d%d",&a,&b,&c,&d);if(a>b){x=a;a=b;b=x;}if(a>c){x=a;a=c;c=x;}if(a>d){x=a;a=d;d=x;}if(b>c){x=b;b=c;c=x;}if(b>d){x=b;b=d;d=x;}if(c>d){x=c;c=d;d=x;} printf("从小到大顺序排列:"); printf("%d,%d,%d,%d\n",a,b,c,d); }

长治市13472694640: C语言 输入4个整数 按从小到大 排列 -
坚伟哈力: #include int main() { int t,a,b,c,d; printf("请输入4个整数:"); scanf("%d,%d,%d,%d",&a,&b,&c,&d); printf("\n a=%d,b=%d,c=%d,d=%d \n",a,b,c,d); if(a>b) {t=a; a=b; b=t;} if(a>c) {t=a; a=c; c=t;} if(a>d) {t=a; a=d; d=t;} if(b>c) {t=b; b=c; c=t;} ...

长治市13472694640: c语言编程 输入4个整数,要求由小到大输出 -
坚伟哈力: 道理都是一样的,再多就可以用循环了,不过4个数用循环不太爽~~,看下面的冒泡排序非循环4个数的实现呵呵: #include <stdio.h>int main(char* x ,char** y){ int temp,a,b,c,d;printf("please input num list:");scanf("%d,%d,%d,%d",&a,&...

长治市13472694640: 输入4个整数,从小到大排序.c语言编程 -
坚伟哈力: #define _CRT_SECURE_NO_WARNINGS #include<cstdio>#define SIZE 4 void selection(int a[],int n); void swap(int *x,int *y);int main() {int a[SIZE];for(int i=0;i<4;i++)scanf("%d",a+i);selection(a,sizeof a/sizeof*a);for(int i=0;i<4;i++)printf(...

长治市13472694640: C语言,输入4个数从小到大排列输出! -
坚伟哈力: main() { int s[4],i,j,a; printf("请输入4个整数(各数之间用空格隔开):"); for(i=0;i<4;i++) { scanf("%d",&s[i]); } for(i=0;i<4;i++) { for(j=i;j<4;j++) { if(s[j]<s[i]) { a=s[j]; s[j]=s[i]; s[i]=a; } } } printf("\n"); for(i=0;i<4;i++) { printf("%d ",s[i]); } }

长治市13472694640: 用计算机C语言程序设计 输入4个整数,要求按由小到大的顺序输出 -
坚伟哈力: #include"stdio.h" main() {int a[4],i,j; printf("请输入四个整数:\n"); //以空格分开// for(i=0;i<4;i++)scanf("%d",&a[i]); for(i=1;i<4;i++)for(j=0;j<=4-i;j++)if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}printf("排列后的顺序是:\n"); for(i=0;i<4;i++)printf("%5d",a[i]); } 用VC++运行过了,没错!如有问题请联系!

长治市13472694640: c语言:写一个程序,将4个从键盘输入的数按照从小到大的顺序输出 -
坚伟哈力: #include "stdio.h"void select_sort(int *x, int n) {int i, j, min, t; for (i=0; i<n-1; i++) /*要选择的次数:0~n-2共n-1次*/{min = i; /*假设当前下标为i的数最小,比较后再调整*/for (j=i+1; j<n; j++)/*循环找出最小的数的下标是哪个*/{if (*(x+j) < *(...

长治市13472694640: C语言编程题:输入4个整数,要求按由小到大顺序输出怎么编啊? -
坚伟哈力: 将四个数存到数组中,然后排序即可. 排序后,再利用循环输出. 代码: #include <stdio.h> int main() { int a[4],i,j; for(i = 0; i < 4; i ++) scanf("%d",&a[i]); for(i = 0; i < 3; i ++) for(j = i+1; j < 4; j ++) { int t; if(a[i]>a[j]) { t = a[i]; a[i] = a[j]; a[j] = t; } } for(i = 0; i < 4; i ++) printf("%d,",a[i]); }

长治市13472694640: C语言简单程序:输入四个数,按从小到大顺序输出
坚伟哈力: 你好,你的代码有两处错误:首先定义数组时长度过小,你要对4个数排序所以数组的长度至少要为4. 其次你对四个整数排序的算法错误,建议用冒泡法进行排序.下面是我在你的代码基础上改进过后的代码,在改动处我已作了注释,希望对...

长治市13472694640: 在C语言中要求输入4个数,把4个数按从小到大排列起来,请问原程序怎么写? -
坚伟哈力: #include <stdio.h> int main() { int a[100],n,i,j,temp; printf("Input the numbers of data:"); scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&a[i]); for(i=0;i<n;i++) for(j=i+1;j<n;i++) { if(a[i]>a[j]) { temp=a[i];a[i]=a[j];a[j]=temp; } } for(i=0;i<n;i++) printf("%d ",a[i]); return 0; } 冒泡排序 希望采纳

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网