不要排序,循环一遍就行用数组A存储n个数据, max1存储最大值, max2存储次大值
初始: max1=A[0],max2=A[1];如果A[1]>A[0],max1=A[1],max2=A[0]
循环A[i]从A[2]到A[n-1]:
1:如果A[i]>max1,则max2=max1,max1=A[i]
2:如果A[i]<=max1&&A[i]>max2,则max2=A[i],max1不变
3:如果A[i]<max2,则max1,max2不变

解决方案 »

  1.   

    偶不知道你数组里面的数据是什么类型。若是数字,LS的就可以啦。若是String,那么自己看着办吧。
      

  2.   

    莫非数据是放在文件中?如果那样的话,读取出来以String 或者Integer放入TreeSet即可,取第一个为最小,取第二个为次最小。不知道更好的办法有没有。
      

  3.   

    童鞋们,java集合框架都丢啦?浪费啊~~~~~~~~
    1)如果LZ纯粹研究排序、查找算法的话那就先去研究一下快速排序法,二分法等等常规排序、查找算法
    2)如果是为了解决实际问题,那么你还是去用java集合框架吧,何必再造一个轮子?何况你的轮子肯定不是最好的。最好的大师们已经给你做了
      

  4.   


    我的意思是,在条件允许的情况下,直接sort数组,然后去第一个和最后一个不就行了?LZ没说不让用JAVA自己的方法呀
      

  5.   


    确实,我们要做的是理解算法和数据结构,然后选择合适的java集合类,没必要完全自己去写。单纯从算法上讲,还有更好的:用数据结构“堆”,构造一个最大堆,然后弹出两次堆顶就OK了,时间复杂度3*O(logN)