在下刚刚学C语言 如何使用冒泡排序发 排列4个数大小 ??急!!急!!急!!急! 望高手帮忙
作者&投稿:乾泡 (若有异议请与网页底部的电邮联系)
楼上的,楼主说了用if,而且排序的话也不用这么麻烦啊,你的排序也不能实现楼主所要的结果:比如a>b>c>d。楼主的意思是:结果要出现类似b>d>a>c的结果。但又要求if实现,估计性能上有点不可取,建议楼主思考
#include
#define n 10 // 宏定义n为10
void main()
{
int a[n] , i , j , temp;
for(i = 0 ; i < n ; i++) //用循环输入数,你那样只是输入最后一个数字
scanf ("%d", &a[i]);
for(i = 0 ; i < n-1 ; i++)
{
for (j = i + 1 ; j < n ; j++)
{
if(a[i] > a[j])
{temp = a[i]; a[i] = a[j]; a[j] = temp; } //交换要再一起 没括号就执行if后面的1句
}
}
for(i = 0 ; i < n ; i++) //循环输入数组
printf("%d", a[i]);
}
//冒泡排序
//BubbleSort
#include <stdio.h>
void BubbleSort(int R[], int n);//待排数据存在R[]中,默认为整形,个数为n
void display();//演示用的函数
void main()
{
display();//主函数部分越短越好,这是个好习惯
}
void display()
{
int a[4] = {0,0,0,0};//初始化数据是个好习惯,默认值一般很坑爹
int i = 0;//C 里面的参数最好放在函数开头
printf("请输入4个整数:");
for(i = 0;i < 4;i++)//C++ 中有这种写法for(int i = 0;i < 4;i++),C 中没有
{
scanf("%d",&a[i]);//异常捕获什么的暂时不管它,正常输入4个整数
}
BubbleSort(a,4);
for(i = 0;i < 4;i++)
{
printf("a[%d]: %d\n", i,a[i]);
}
}
void BubbleSort(int R[], int n)
{
int i = 0;
int j = 0;
int flag = 0;
int temp = 0;
for(i = 0;i < n;i++)//数组从下标0开始存储数据
{
flag = 0;//默认不发生交换
for(j = n;j >= i + 1;j--)
{
if( R[j-1] > R[j] )//最小的移向左边
{
temp = R[j];
R[j] = R[j - 1];
R[j - 1] = temp;
flag = 1;//发生交换,flag = 1
}
}
}
if( flag == 0 )//一趟排序没有发生交换,则证明序列有序,排序结束
{
return;
}
}
其实很简单,就是一个一个进行对比如果a<b/a>b就把两个变量进行交换,使得最大/最小的排在前面。
1 2 4 3 四个数,把它变成从大倒小
1<2 交换成为 2143
1<4 交换成为 2413
1<3 交换成为 2431
然后最小的1就一定会在最后
然后比较前3个数,2<4(交换),2<3(交换);
成为4321,
这是一个巧合的例子,程序应该还要比较前两个数
4>3(不交换)
最后成为4321。
以下是样例程序。
#include<stdio.h>
int main()
{
int a[5]={1,2,4,3};
int i,j,t; //i,j是计数器,t用作交换
for(i=0;i<4;i++)
{
for(j=0;j<4-i-1;j++)
{
if(a[j]<a[j+1]) //如果后面的数字大于前面的数字
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t; //就把两个数交换
}
}
}
printf("%d %d %d %d %d\n",a[0],a[1],a[2],a[3],a[4]);
return 0; //程序正常结束
}
你懂了么?
从小到大排列
Int temp;
For ( I = 0; I < 3; i++)//4个数排列,需要排三次即可
For( j = 1; j<4-I; j++ )//每次排序,把两个较大的值往后移,比较4-I次
{//如果前面的大于后面的,交换顺序
If( num[j]<num[j-1])
Temp = num[j];
Num[j] = num[j-1];
Num[j-1] = temp;
}//可以把“4”改为n,(n>1),即可实现n个数的从小到大排列
把If( num[j]<num[j-1])
改为If( num[j]<num[j-1])即可实现从大到小排列。没有验证,但是思路是这样的,希望对你有帮助
#include<stdio.h>
int main()
{
int a[4],i,j;
scanf("%d%d%d%d",&a[0],&a[1],&a[2],&a[3]);
for(i = 0;i<3;i++)
{
int flag = 0;//一个标志,如果下面的循环过后,flag的值没变,那就说明这四个数已经排好序了,直接跳出循环体就行了
for(j = 0;j+1<4-i;j++)
{
if(a[j]>a[j+1])
{
int temp;
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
flag = 1;
}
}
if(flag == 0)
{
break;
}
}
printf("%d\t%d\t%d\t%d\n",a[0],a[1],a[2],a[3]);
return 0;
}
建议你学完冒泡过后,去了解一下哈希算法,比冒泡有用得多,相比之下,比冒泡快得多
完整程序如下:
#include<stdio.h>
int main()
{
int a[4];
int i, j;
//输入四个数据
printf("请输入4个整数:");
scanf("%d%d%d%d", &a[0], &a[1], &a[2], &a[3]);
//冒泡排序
for(i = 0; i < 3; i++)
for(j = 0; j < 5 - i; j++)
{
if(a[j+1] < a[j])
{
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
//输出排序好的数
printf("排序之后:%d %d %d %d", a[0],a[1],a[2],a[3]);
}
检贾益肝: 其实很简单,就是一个一个进行对比如果a<b/a>b就把两个变量进行交换,使得最大/最小的排在前面.1 2 4 3 四个数,把它变成从大倒小1<2 交换成为 21431<4 交换成为 24131<3 交换成为 2431 然后最小的1就一定会在最后 然后比较前3个数,...
桓仁满族自治县18617458498: C语言冒泡排序法是怎么排序的? - ?
检贾益肝: C语言冒泡排序法的排2113序规则:5261将被排序的记录4102数组R[1..n]垂直排列,每个记录R看作是重量为R.key的气泡1653.根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"...
桓仁满族自治县18617458498: C语言:编写一个程序用冒泡排序实现升序排列 - ?
检贾益肝: 1、首先打开一个空白的C语言文件,首先先定义一组待排序的数列以及各个变量,接着就是用来处理排序的逻辑: 2、冒泡排序的逻辑是一组数从第一个数值开始,如果相邻两个数的排列顺序与期望不同,则将两个数的位置进行交换,重复这样的过程直到最后一个数不需要交换则排序完成,如果有N个数需要排序,则需要进行(N-1)趟的比较: 3、最后编译运行程序,观察最终排序的结果,可以看到数字被从小到大的排列好了,以上就是C语言冒泡排序实现的过程:
桓仁满族自治县18617458498: C语言冒泡排序法 - ?
检贾益肝: 冒泡排序每一趟排序把最大的放在最右边. 比如: 87 12 56 45 78 87和12交换:12 87 56 45 78 87和56交换: 56 87 45 78 87和45交换: 45 87 78 87和78交换: 78 87 到此第一趟排序结束,接下来的每一趟排序都是这样.1 2 3 4 5 6 7 8 9 ...
桓仁满族自治县18617458498: 请讲解下C语言的冒泡排序法 - ?
检贾益肝: 冒泡法,就是通过多次循环排序的一种方法. 第一次循环,让最小(最大)的值浮到第一位, 第二次循环,让剩余的数字中最小(最大)浮到第二位 依次类推. 这种方法就像水泡上浮一样,顾名.
桓仁满族自治县18617458498: c语言程序设计作业...1.冒泡法排序,2. 第二大整数,3.数组输出1.冒泡法排序输入10个数,用“冒泡法”对10个数排序(由小到大)这10个数字在100以... - ?
检贾益肝:[答案] # include int main() { int a[10],i,j,t; for(i=0;i
桓仁满族自治县18617458498: c语言冒泡排序详解 - ?
检贾益肝: #include#define MAXE 20 typedef char KeyType; typedef char InfoType[10]; typedef struct { KeyType key; InfoType data; }RecType; void bubblesort(RecType R[],int n) { int i,j,k; RecType temp; for(i = 0; i i;i--) if(R[j].key
桓仁满族自治县18617458498: 求关于c语言 冒泡排序法的讲解 - ?
检贾益肝: 冒泡排序法是简单的排序方法之一,它和气泡从水中往上冒的情况有 些类似.其具体做法是(1)对于数组a中的1至n个数据,先将第n个和第n-1个数据进行比较,如果 a(n)<a(n-1),则两个数交换位置. 然后比较第n-1个和第n-2个数据;依次...
桓仁满族自治县18617458498: C语言怎么用冒泡法按姓名(汉字)大小排序 - ?
检贾益肝: 你试试这个,就是排序后输出的:(是以字母表从小到大排) #include <iostream> #include <string> using namespace std; int main() { string s[4]={"大军","阿姨","弟弟","妹妹"},t; for(int i=0;i<4;i++) { for(int j=i;j<4;j++) { if(s[i]>s[j]) { t=s[i]; s[i]=s[j]; s[j]=t; } } } for(i=0;i<4;i++) cout<<s[i]<<endl; return 0; }
桓仁满族自治县18617458498: 求教c语言二维数组的冒泡排序法? - ?
检贾益肝: 1、打开Visual Studio工具并创建一个新的Win32程序. 2、在打开的C语言文件中,导入stdio.h空间,然后准备一个main函数. 3、接下来,准备一个需要进行冒泡排序的整数数组.如下图所示,数组中数字的顺序是不正常的. 4、接下来,准备变量,准备好的变量用于对交互数据进行排序. 5、然后我们准备两个for循环数组,我们需要注意外循环和内循环.