Description
求N个整数中倒数第二小的数。每一个整数都独立看成一个数,比如,有三个数分别是1,1,3那么,第二小的数就是1。
Input
第一行输入一个整数N,表示数组的长度,2 <= N < 1024
第二行输入N个整数,空格间隔,表示数组元素值
Output
输出倒数第二小的数值
分析:逻辑:输入数值->对数值进行排序->输出第二小
故本题难点在于对数值进行排序
我们用上经典的冒泡算法进行排序:
#include<stdio.h>
int main()
{
int N;
int a[1025];
int o;
//数值输入部分
scanf("%d",&N);
for(o=0;o<N;o++)
{
scanf("%d",&a[o]);
}
//冒泡算法排序部分
int i,j;
for(i = 0;i < N;i++) //采用双重循环
{
for(j = 0;j < N - 1 - i;j++)
{
if(a[j] > a[j+1]) //这里默认采用升序来排列
{
int temp; //定义一个临时值来存储数据,以此来达到交换数值的目的
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
printf("%d",a[1]);
return 0;
}
但是显然,冒泡算法还是略显复杂.
那么,有没有简单的写法?
有!
因为平台允许使用c++的代码
所以这里我们直接用c++的代码进行降维打击
我们使用sort()函数直接排序
代码即这样
#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
int N;
int a[1025];
int i;
scanf("%d",&N);
for(i=0;i<N;i++)
{
scanf("%d",&a[i]);
}
sort(a,a+N);
printf("%d",a[1]);
}
这样更加简单直观.