求数组中第二大的数据
//编译环境 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语言中的指针以及二级指针
- 下一篇: 寻找第二小的数