《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;
}

版權聲明:拷貝、轉載請附上本文連接

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