在数组中查找次大值,并与最后一个元素交换—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之学习int和String的相互转换

9810
来自专栏Java帮帮-微信公众号-技术文章全总结

07.Java变量类型

07.Java变量类型 Java 变量类型 在Java语言中,所有的变量在使用前必须声明。声明变量的基本格式如下: ? 格式说明:type为Java数据类型。i...

41270
来自专栏LhWorld哥陪你聊算法

【Scala篇】--Scala中的函数

Scala中的函数还是比较重要的,所以本文章把Scala中可能用到的函数列举如下,并做详细说明。

27110
来自专栏Java 源码分析

静态内部类

定义:静态内部类,定义在类中,任何方法外,用static定义;静态内部类只能访问外部类的静态成员。 注意点: 一般情况下,如果一个内部类不是被定义成静态内部类,...

33780
来自专栏水击三千

浅谈JavaScript的面向对象程序设计(三)

  前面已经对JavaScript的面向对象程序设计作了简单的介绍,包括了对象的属性、对象的工厂模式、构造函数和原型等。通过介绍,这些创建对象的方法依然有不少优...

24650
来自专栏猿人谷

JDK1.7源码分析01-Collection

同步发布:http://www.yuanrengu.com/index.php/20180221.html Java的集合类主要由两个接口派生而出:Collec...

34550
来自专栏一“技”之长

深入理解JavaScript函数 原

    从功能上理解,函数是一组可以随时运行的语句,是一段代码块,也是所谓的子程序。在JavaScript中,函数实质上也是一种对象,是Function对象。函...

7310
来自专栏猿人谷

const用法小结

常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。因此,定义或说明常类型时必须进行初始化。 概述 1. const有什么...

19170
来自专栏开发与安全

从零开始学C++之构造函数与析构函数(二):初始化列表(const和引用成员)、拷贝构造函数

一、构造函数初始化列表 推荐在构造函数初始化列表中进行初始化 构造函数的执行分为两个阶段 初始化段 普通计算段 (一)、对象成员及其初始化 #inclu...

31900
来自专栏机器学习算法与Python学习

python: sort, sorted, reverse

python语言中的列表排序方法有三个:reverse反转/倒序排序、sort正序排序、sorted可以获取排序后的列表。在更高级列表排序中,后两中方法还可以加...

38880

扫码关注云+社区

领取腾讯云代金券