原标题:C语言之数组的另一种有趣的排列方法,以及输出数组中最大的元素的方法
上一讲呢我们介绍了数组的“冒泡排序”法,这一节我们在来看看数组的另一种排列方式-“选择排序方法”和用“打擂台”的方法来求出数组的最大值。
我们先来看看选择排序法:
选择排序法是以冒泡排序法为基础,进化出来的更有效率的数组排序方法。
我们先来看一个例子,我们从小到大排列5、3、4、1、2这5个数。
代码如下:
/*数组元素从小到大进行排序*/
#include
int main()
{
int a[5], i, j=1,min;//i控制的是数组的下标,j代表的是i的下一个元素,k控制的是最小的值
printf("请输入数组元素:\n");
/*以下循环代表的是数组元素的输入*/
for (i = 0; i < 5; i++)
{
scanf_s("%d", &a[i]);
}
/*以下循环是排序循环*/
for (i = 0; i < 5; i++)
{
for (j= i+1; j < 5; j++)//j代表的是数组元素a[i]的下一个元素
{
if (a[i] > a[j])
{
min = a[j];
a[j] = a[i];
a[i] = min;
}
/*大家一定要搞懂以上循环的意义*/
}
}
/*以下循环是数组元素的输出*/
for (i = 0; i < 5; i++)
{
printf("%d", a[i]);
}
return 0;
}
我们来看看程序具体的运行过程是怎样的:
首先,程序通过scanf_s语句(scanf_s语句是visual stdio 2019版本的编译器中的输入语句,像VC++6.0和DEVC++编译器所用的输入语句是scanf)从键盘获取数组的元素。
for(i=0;i<5;i++)这层循环先执行,此时的i=0,选出a[0]这个元素与后面的元素比较。
(所谓的选择排序就是先选择一个数,用这个数与其他数进行比较,如果这个数小于(大于)其他数,就交换位置,否则就不动,继续与下一个数进行比较。)
程序在向后执行,到了for(j=i+1;j<5;j++)这层循环上了。
此时的j=1,这是开始执行if语句进行比较,将较小的数向前移动,较大的数向后移动。
这一个被选出来的元素a[0]和剩余的数比较完成后,在开始第二个数的比较,一次类推····
直到比较完毕。
选择排序法的执行效率要比冒泡排序法高。
我们介绍完了这一种数组的排序方式之后,我们在来介绍一下如何在数组中求出其最大值。
这个问题我们使用的“打擂台”的方法。
和选择排序法类似,“打擂台”法也是先选出一个数,假定它是最大的,即这个数是擂主,其他的数依次与擂主进行比较,如果其他的某数大于这个擂主,那么那个数将成为新的擂主,最后输出这个数就行了。
我们来看一个例子,还是用5、3、4、1、2这5个数,要求我们编写一个程序输出这五个数中最大的数,这和我们在日常考试中碰到的输出某个班级的最高分数类似。
代码如下:
#include
int main()
{
int a[5], i,max;
/*这个循环是控输入数组元素*/
printf("请输入数组的元素:\n");
for (i = 0; i < 5; i++)
{
scanf_s("%d", &a[i]);
}
max = a[0];//我们假定a[0]是最大的元素
/*以下循环是为了比较出数组中最大的元素*/
for (i = 0; i < 5; i++)
{
if (a[i + 1] > max)
{
max = a[i + 1];
}
}
/*最后输出这个比较出来的值就可以了*/
printf("数组中最大的元素是:%d\n",max);
return 0;
}
好了,今天的讲述就到这里了。返回搜狐,查看更多
责任编辑: