专栏首页WindCoder在数组中查找次大值,并与最后一个元素交换—C语言

在数组中查找次大值,并与最后一个元素交换—C语言

/***************************************************
作业要求:
		在数组中查找次大值,并与最后一个元素交换
完成日期:
		2013年9月3日
***************************************************/
#include <stdio.h>

// 函数原型
int findSecondMaxValueInArray(int a[], int n);

// main函数
int main(void)
{
	int a[8] = {2, 5, 1, 3, 2, 3, 4, 6};	// 定义数组
	int index;	// 待求次大值元素下标
	int tmp;	// 临时变量,用来交换数组

	// 求数组中次大值元素下标
	index = findSecondMaxValueInArray(a, 8);
	// printf("%dn", index);

	// 次大值与数组最后一个元素交换
	tmp = a[index];
	a[index] = a[7];
	a[7] = tmp;

	// 输出数组……

	return 0;
}

/****************************************************
函数功能:
		在数组中查找次大值元素
算法思想:
		(1) 设置两个指针(下标)初始值均为0(指向数组第1个元素);
		(2) 遍历数组,若当前元素大于最大值,修改最大值下标为当前元素;
			修改次大值下标为原来最大值下标;
		(3) 若当前元素不大于最大值,但大于次大值,则修改次大值下标为
			当前元素;
		(4) 数组遍历结束后,次大值下标即为所求。
函数参数:
		int		a[]		待查找元素的数组
		int		n		数组中元素个数
返回值:
		返回次大值元素在数组中的下标
时间复杂度:
		O(n):其中n表示数组中元素个数
空间复杂度:
		O(1):借助了三个辅助变量i、max1、max2实现
*****************************************************/
int findSecondMaxValueInArray(int a[], int n)
{
	int i;			// 数组元素索引(下标)
	int max1 = 0;	// 最大值元素下标
	int max2 = 0;	// 次大值元素下标

	for (i = 0; i < n; ++i)
	{
		if (a[max1] < a[i])
		{
			max2 = max1;	// 原来最大值为新的次大值
			max1 = i;		// 当前元素为新的最大值
		}
		else if (a[max2] < a[i])
		{
			// 若新的最大值没有出现,但是数组中元素大于次大值
			max2 = i;
		}
	}

	// 返回次大值下标
	return max2;
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java漫谈-数组

    在Java语言中,数组是对象(An object is a class instance or an array.),而且是动态创建的。

    汐楓
  • 数据结构01-数组

    数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。

    汐楓
  • 求十个数中最大值和最小值-C++

    汐楓
  • Rsync全网数据同步备份及检查

    用户1369328
  • Confluence 6 移动浏览查看任务

    有关更多Confluence 6 移动界面的使用,请参考页面通过你的移动浏览器使用 Confluence中的内容。

    HoneyMoose
  • 比特币离你很近-比特币地址及生成

    这几天比特币单币的价格已经在12万以上了,对自己来说充满了遗憾和兴奋。遗憾的是之前持有的币没能一直拿住,在对于目前价格非常低的点已经出清了。兴奋的点在做为一个很...

    企鹅号小编
  • 08:病人排队

    08:病人排队 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB描述 病人登记看病,编写一个程序,将登记的病人按照以下原则排出看...

    attack
  • 微信小程序“实时日志”帮你快速找到bug

    为帮助小程序开发者快捷地排查小程序漏洞、定位问题,微信官方推出了实时日志功能。从基础库2.7.1开始,开发者可通过提供的接口打印日志,日志汇聚并实时上报到小程序...

    极乐君
  • 基于Metronic的Bootstrap开发框架经验总结(6)--对话框及提示框的处理和优化

    在各种Web开发过程中,对话框和提示框的处理是很常见的一种界面处理技术,用得好,可以给用户很好的页面体验,Bootstrap开发也一样,我们往往在页面新增、编辑...

    MonroeCode
  • R语言绘制物种Rank-abundance曲线

    在微生物16S/ITS/18S测序分析报告中,我们经常可以看到这样的图,称为Rank-abundance曲线。

    用户7585161

扫码关注云+社区

领取腾讯云代金券