牛骨文教育服务平台(让学习变的简单)
博文笔记

求数组中第二大的数据

创建时间:2016-05-04 投稿人: 浏览次数:540
//编译环境 VS3013

#include<stdio.h>
#include<stdlib.h>

//选择法
int getMaxNum(int *p, int n)//获取最大值的下标
{
	int maxData = p[0];		//假定p[0] 最大
	int maxi = 0;

	for (int i = 1; i < n; i++) 
	{
		if (maxData < p[i])
		{
			maxData = p[i]; //最大值始终赋给maxData
			maxi = i;
		}
	}
	//return maxData;
	return maxi; //返回最大值的下标,
}

void swap(int *p1, int *p2) //交换两个数据的值
{
	int temp = *p1;
	*p1 = *p2;
	*p2 = temp;
}

void main()
{
	//int a[10] = { 98, 234, 45, 23, 43, 234, 65, 111, 234, 234 };

	int a[10] = { 8, 6, 8, 8, 8, 8, 8, 8, 8, 8 };

	//printf("getMaxNum=%d", getMaxNum(a, 10));
	//找到最大值

	int maxi = getMaxNum(a, 10);	//获取最大值的下标
	int max = a[maxi];				//max保留了最大值
	printf("max= %d
", max);
	swap(&a[0], &a[maxi]);			//将最大值与第一个值交换

	
	int i = 1;
	int flag = 0; //0代表没有第二大的数,也就是说数组中所有数据相等

	while (i < 10)
	{
		int nextMaxi = getMaxNum(a + i, 10 - i);
		int nextMax = a[i + nextMaxi];

		if (max != nextMax)//第一大和第二大不相等的时候才打印第二大
		{
			printf("nextMax = %d
", nextMax);
			flag = 1;  //存在第二大的数
			break;
		}
		swap(&a[i], &a[i + nextMaxi]);
		i++;
	}

	if (flag == 0)
	{
		printf("不存在第二大的数
");
	}
	else
	{
		printf("存在");
	}

	//数组中第一大的数据只有一个的情况。
	/*int nextMaxi = getMaxNum(a + 1, 9);
	int nextMax = a[nextMaxi];

	if (max != nextMax)
	{
		printf("nextMax=%d", a[1+getMaxNum(a+1, 9)]);
	}*/

	system("pause");

}

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。