求数组第二大的数(选择排序)

定义一个最大 和第二大的数
每次循环都判断数组中是否有比最大的数大的有则交换两者的值
同时 把原来最大数的值赋值给第二大的


public class SecondMax {
    public static int FindSecMax(int[] data) {
        int count = data.length;
        int maxnumber = data[0];
        int sec_max = Integer.MIN_VALUE;
        for(int i = 1;i<count;i++) {
            if(data[i]>maxnumber) {
                sec_max = maxnumber;
                maxnumber=data[i];
            }
            else {
                if(data[i]>sec_max)
                    sec_max = data[i];
            }
        }
        return sec_max;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] array = {7,3,19,40,4,7,1};
        System.out.println(FindSecMax(array));
    }

}

原文地址:http://blog.51cto.com/12509153/2162755

时间: 2024-10-11 19:11:01

求数组第二大的数(选择排序)的相关文章

sql求倒数第二大的数,效率不高,但写法新颖

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication9 { class Program { static void Main(string[] args) { // sql如下,我把它翻译成代码,加深理解 // SELECT MAX(id)FROM sys_men

求出整形数组中第二大的数的值

1 int findsecond(int a[], int size) 2 { 3 int max = a[0]; 4 int second = a[1]; 5 int index = 0; 6 for (int i = 0; i < size; ++i) 7 { 8 if (max < a[i]) 9 { 10 second = max; 11 index = i; 12 max = a[i]; 13 } 14 else if (max > a[i]) 15 { 16 if (seco

如何找出数组中第二大的数

1.最容易想到的办法 我们可以用最简单的办法来找到一个数组中任意大小的数字,那就是按照某一个排序方式将数组的所有元素进行排序,然后按需取出来就可以,知识这种方式的时间复杂度和空间复杂度比较大,所以,有了下面这种方式 2.通过设置两个变量来进行判断 这种方式可以只通过一遍扫描数组即可找到第二大数,具体的形式如下:先定义两个变量:一个变量用来存储数组的最大数,初始值为数组首元素,另一个变量用来存储第二大的数,初始值为最小负整数,然后遍历数组元素,如果数组元素的值比最大数变量还大,更新最大数:若数组元

《数据结构与算法分析:C语言描述》读书笔记------练习1.1 求第K大的数

求一组N个数中的第k个最大者,设k=N/2. 1 import java.util.Random; 2 3 4 public class K_Max { 5 6 /** 7 * @param args 8 */ 9 //求第K大的数,保证K大于等于1,小于等于array.length/2哦 10 public static int TopK(int array[],int K) 11 { 12 int topk[] = new int [K]; 13 for(int i = 0; i<topk.

普林斯顿公开课 算法3-2:求第k大的数

问题 给定N个元素的数组,求第k大的数. 特例 当k=0时,就是求最大值,当k=N-1时,就是求最小值. 应用 顺序统计 求top N排行榜 基本思想 使用快速排序方法中的分区思想,使得a[k]左侧没有更小的数,右侧没有更大的数 性能 快速选择算法的复杂度是N. 最坏情况下的复杂度是1/2N^2,但是可以通过预先洗牌来防止出现最坏情况 代码 public class QuickSort { // 对区间 [start, end) 进行分区 public static int partition(

面试算法题:16个数,最多用20次比较,找出第二大的数?

这道题最笨的方法就是先从16个数中选出最大的数,然后再从剩下的15个数中选出最大数就可得到答案,因此,需要15+14=29次比较. 既然这道题要求在20次比较之内就能找出第二大的数,那我们就想能简单的方法. 假设16个数中最大的是A,第二大的是B. 首先将16个数两两进行比较,较大者胜出,然后再在胜出者中进行两两比较,按此方法,最后选出最大数A,如下所示 红色路线是最大数经过的路径. 接下来分析B可能存在的位置. 将16个数分为左部分和右部分各8位: 1.如果A和B在两个不同的部分(A在左部分,

python找出数组中第二大的数

#!usr/bin/env python #encoding:utf-8 ''''' __Author__:沂水寒城 功能:找出数组中第2大的数字 ''' def find_Second_large_num(num_list):   '''''   找出数组中第2大的数字   '''   #直接排序,输出倒数第二个数即可   tmp_list=sorted(num_list)   print 'Second_large_num is:', tmp_list[-2]   #设置两个标志位一个存储最

【优先队列-求第Ki大的数】Black Box

Black Box Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8637   Accepted: 3542 Description Our Black Box represents a primitive database. It can save an integer array and has a special i variable. At the initial moment Black Box is empt

数组常见的操作_选择排序

排序分类:       内部排序:就是将需要处理的所有数据都加载到内部存储器中进行排序                交换式排序法:是运用数值较后,依判断规则对数据位置进行交换,以达到排序的目的                    冒泡排序法(Bubble Sort)                    快速排序法(Quick Sort)                选择式排序法:                     选择排序法(Select Sort)