(1/2)C 语言: 求一组数据里的第二大值与第二小值,即次大、次小值...
发布网友
发布时间:2024-05-10 18:33
我来回答
共4个回答
热心网友
时间:2024-06-02 09:19
#include <stdio.h>
int main(void)
{
int a[10];
int p;
for (int i=0;i<10;i++) { scanf("%d",&a[i]);}
for (int i=0;i<2;i++)
for (int j=i+1;j<10;j++)
if (a[i]<a[j]) {p=a[i];a[i]=a[j];a[j]=p;}
for (int i=9;i>7;i--)
for (int j=i-1;j>1;j--)
if (a[i]>a[j]) {p=a[i];a[i]=a[j];a[j]=p;}
printf("%d %d",a[1],a[8]);
}
这是10个数字的例子,a[1]和a[8]代表次大和次小值
如果要求N的话,修改一下循环的条件就行了
热心网友
时间:2024-06-02 09:20
对于这个问题若排序则时间复杂度太高,因为要求只是要你找出两个数而已,定义:int a[4] = { 0 };
然后遍历整个数据,这是必须的。
只说思路,代码楼主自己动手才是学习:
如上,遍历数据,将前2数大的放在a[0];
小的放在a[1];
后面的就简单了,一直遍历到最后一个数,假设遍历到的数是N.
if( N > a[0] )
{
a[2] = a[0];
a[0] = N;
}
else if( N < a[1] )
{
a[3] = a[1];
a[1] = N;
}
基本上代码就这么些,遍历也就是拿个指针移动。
最后,最大的在a[0],最小的在a[1],所需的在a[2]和a[3];
这个是时间复杂最低的方法,空间复杂度也不高,当然若你的数据总共也就4个数 那...
简而言之,数据越多,该算法越优,若有疑问,楼主再提。先睡觉了......
热心网友
时间:2024-06-02 09:23
先排好序,再取下标为1的和下标为数组长度减1的数组元素
贴你的程序看看
热心网友
时间:2024-06-02 09:19
用冒泡法,插入法,选择法等等算法进行排一下序就可以输出你想要的结果了。