1.方法思想
数组在C语言中即为数据类型相同的一组数,将一组无规则数按大小依次排序并输出,可以采取冒泡排序的思想,所谓冒泡排序就是数字像汽水中的气泡一样总是向某个方向前进,最终到达最终点。
假设我们定义了一组数组,从左到右 a[0] ~ a[9] 共10个数组元素,将a[0]与a[1]对比,如果a[0]大于等于a[1],就将二者的数对换(注意这里是将两者代表的数交换大小,而不是将1和0交换,a[1]和a[0]相当于两个容器,是用来装数字的),这样大的数就处于右边,否则不做处理,再比较 a[1]与a[2],同样的大数放右边,以此类推一直比对到a[9],那么第一轮下来,整个数组中最大的数一定是a[9],同理,我们进行第二轮,由于第一轮中已经确定a[9]是最大的数了,所以只要对剩下的9个数重复一遍操作,第二轮结束后就可以得到 a[8] <= a[9] ,如此往复,最终就可以实现数组按大小排序了。
没错,这里的思想正是循环!
2.实战演练
1.定义数组
手动输入一组数并将其打印在屏幕上:
#include<stdio.h>
int main()
{
int a[10],i;/*定义一个数组及变量i,数组元素共10个*/
for(i=0;i<10;i++)
{
printf("input a[i] when i=%d\n",i);
scanf("%d",&a[i]);/*依次输入a[0]至a[9]的值*/
}
for(i=0;i<10;i++)
printf("%d ",a[i]);/*打印数组*/
}
2.按从大到小的顺序对数组排序
for(i=0;i<10;i++)
{
for(s=0;s<9-i;s++)
{
if(a[s]>=a[s+1])
{
medium=a[s];/*medium是交换媒介*/
a[s]=a[s+1];
a[s+1]=medium;
}/*if语句实现大数右移的功能*/
}/*s的循环语句与if语句结合实现上文中所说的每一轮操作中将最大数移动至最右方*/
printf("%d ",a[9-i]);/*每一轮比较后输出本轮中最大的数,事实上就是排序,a[9-i]就是每轮中最大的数*/
}/*i的循环就是实现多轮操作,即第一轮比较结束后进行第二轮,一直重复到第九轮*/
3.完整程序如下:
#include<stdio.h>
int main()
{
int a[10],i,s,medium;/*定义一个数组及变量,数组元素共10个*/
for(i=0;i<10;i++)
{
printf("input a[i] when i=%d\n",i);
scanf("%d",&a[i]);/*依次输入a[0]至a[9]的值*/
}
for(i=0;i<10;i++)
printf("%d ",a[i]);/*打印数组*/
printf("%c",'\n');
for(i=0;i<10;i++)
{
for(s=0;s<9-i;s++)
{
if(a[s]>=a[s+1])
{
medium=a[s];/*medium是交换媒介*/
a[s]=a[s+1];
a[s+1]=medium;
}/*if语句实现大数右移的功能*/
}/*s的循环语句与if语句结合实现上文中所说的每一轮操作中将最大数移动至最右方*/
printf("%d ",a[9-i]);/*每一轮比较后输出本轮中最大的数,事实上就是排序,a[9-i]就是每轮中最大的数*/
}/*i的循环就是实现多轮操作,即第一轮比较结束后进行第二轮,一直重复到第九轮*/
}
4.运行结果
input a[i] when i=0
3
input a[i] when i=1
4
input a[i] when i=2
2
input a[i] when i=3
4
input a[i] when i=4
5
input a[i] when i=5
9
input a[i] when i=6
25
input a[i] when i=7
98
input a[i] when i=8
535
input a[i] when i=9
0675
3 4 2 4 5 9 25 98 535 675
675 535 98 25 9 5 4 4 3 2
Process returned 0 (0x0) execution time : 70.463 s
Press any key to continue.
结果可以看出已实现既定排序的目标,是不是很简单呢?