您的位置:首页 > 其它

求数组中第二大的数据

2016-05-04 23:05 363 查看
//编译环境 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\n", 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\n", nextMax);
flag = 1;  //存在第二大的数
break;
}
swap(&a[i], &a[i + nextMaxi]);
i++;
}

if (flag == 0)
{
printf("不存在第二大的数\n");
}
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");

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: