求数组中第二大的数据
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"); }
相关文章推荐
- POSIX规范
- 隐马尔可夫模型
- 合并果子
- Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结(转)
- Python-量化分析之路
- linux shell编程学习--字符串的使用和操作
- Hibernate lazy load
- android对话框介绍
- JQuery中图片自动切换和手动切换
- UVA 11039 Building designing
- Java Web基础知识之文件下载:当你下载文件的时候到底发生了什么?
- Kingston KVR编号的含义
- Hive 基础之:分区、桶、Sort Merge Bucket Join
- 如果有人问你数据库的原理,叫他看这篇文章
- hdu——1711Number Sequence(kmp专练)
- 多态的基础知识总结
- JavaScript 详说事件机制之冒泡、捕获、传播、委托
- ImageView的属性android:scaleType作用
- Apache Maven项目提供的EAR插件详解
- 【22】-快速排序随机选择元素的优雅解法