《c/c++找出一个无序数组中第二大的数》

使用c/c++找出一个无序数组中第二大的数

下面是代码:

#include <iostream>
using namespace std;

int Find_second(int* p, int len)
{
	//判空
	if (NULL==p || len <= 1)
	{
		return 0;
	}
	//取数组前两个元素,认为是最大的两个
	int max = p[0], second = p[1];
	if (max< second)
	{
		//wap(max, second);
		max = p[1];
		second = p[0];
	}
	for (int i = 0; i < len; i++)
	{
		//如果max不是最大,就更换较大的
		if (max < p[i])
		{
			second = max;
			max = p[i];
		}
		//没有我们初始选的数大,那么对比下第二大的
		else if (second<p[i])
		{
			second = p[i];
		}
	}
	return second;
}

int main()
{
	int buf[5] = { 0,2,3,1,5 };
	int len = sizeof(buf) / sizeof(int);
	int ret = Find_second(buf, len);
	if (!ret)
	{
		cout << "参数错误" << endl;
	}
	cout << "第二大的数是:" << ret << endl;
}

使用c/c++找出一个无序数组中第二小的数

思路是一样的,只是判断改一下而已。

#include <iostream>
using namespace std;

int Find_second(int* p, int len)
{
	//判空
	if (NULL==p || len <= 1)
	{
		return 0;
	}
	//取数组前两个元素,认为是最小的两个
	int min = p[0], second = p[1];
	if (min< second)
	{
		swap(min, second);
		//max = p[1];
		//second = p[0];
	}
	for (int i = 0; i < len; i++)
	{
		//如果max不是最大,就更换较大的
		if (min > p[i])
		{
			second = min;
			min = p[i];
		}
		//没有我们初始选的数大,那么对比下第二大的
		else if (second > p[i])
		{
			second = p[i];
		}
	}
	return second;
}

int main()
{
	int buf[5] = { 0,2,3,1,5 };
	int len = sizeof(buf) / sizeof(int);
	int ret = Find_second(buf, len);
	if (!ret)
	{
		cout << "参数错误" << endl;
	}
	cout << "第二小的数是:" << ret << endl;
}

版权声明:拷贝、转载请附上本文连接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章