c语言怎么输出数组第一个数,和由大到小排序,并输出最大的数

如题所述

别光顾着在学校玩,要搞点学习啊

最好理解的方法:冒泡法排序

从第一个数开始依次对相邻两数进行比较,如次序对则不做任何操作;如次序不对则使这两个数交换位置。第一遍的比较后,最大的数已

放在最后,第二遍只需考虑(N-1-i)个数,以此类推直到第(N-1)遍比较后就可以完成排序。

源程序如下:

#define N 5 //定义要排序的个数N为5个
#include"stdio.h"
========================主程序部分=================================
main() //主程序开始
{
int a[N],i,j,temp; //定义数组a,变量i,j和中间存储变量temp
printf("please input %d numbers\n",N); //输出文本,"请输入N个数字(此处N=5)"
====================输入并接收要排序的数===========================
for(i=0;i<N;i++) //循环语句,利用i循环将N个数存入数组a[i]
scanf("%d",&a[i]);
=============================排序===================================
for(i=0;i<N-1;i++)
//关键语句,要将5个数排序,只需要每轮从数组第一个数开始和相邻的数比较大小,较大的数放在后面,每轮结束后,大的数都会排最后,相互比较4轮,所以要循环N-1次
for(j=0;j<N-1-i;j++) //第一轮比较结束后,最大的数已经排在最后,相当于可以少比较一次,所以只需循环N-1-i次,加快运行速度,避免冗余比较
{
if(a[j]>a[j+1]) //如果前一个数a[j]大于后一个数a[j+1],则2个数互换位置,否则不作任何操作
{
temp=a[j]; //互换位置:将a[j]的值赋给中间变量temp,此时a[j]还是原来的值
a[j]=a[j+1]; //将较小的数a[j+1]的值赋给a[j],a[j]的值此时为较小的那个数,a[j+1]的值未变,仍然是较大的值
a[j+1]=temp; //将之前中间变量temp存的较大的值赋给a[j+1],位置互换结束
}
}
=======================输出排序结果================================
printf("the array after sort:\n"); //输出文本,"排序后的数组为:"
for(i=0;i<N;i++) //循环N次
printf("%5d",a[i]); //输出数组a[i]的值
}

附每轮比较结果:
原始数据为: 5 4 3 2 1
第一轮比较: 4 3 2 1 5
第二轮比较: 3 2 1 4 5
第三轮比较: 2 1 3 4 5
第四轮比较: 1 2 3 4 5
温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

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