首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在数组中查找次大值,并与最后一个元素交换—C语言

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

作者头像
WindCoder
发布2018-09-20 14:08:41
2.6K0
发布2018-09-20 14:08:41
举报
文章被收录于专栏:WindCoderWindCoder
/***************************************************
作业要求:
		在数组中查找次大值,并与最后一个元素交换
完成日期:
		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;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档