求数组中第二大的数据
//编译环境 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");
}
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: C语言中的指针以及二级指针
- 下一篇: 寻找第二小的数
