给一组整数排序 按照出现的频率大小由高到低排列 相同频率的数字按照数字出现的前后顺序排列

解决方案 »

  1.   

    steam的groupby orderby 一步到位?
      

  2.   

    这是要sql还是要代码
      

  3.   

    想要代码 用java写
      

  4.   

    定义一个对象X{int num ;//记录此数据 int size;//记录数据出现次数}
    定义一个List<X>
    每个数据过来,遍历List<X>,如果等于某个X.num,就将此X.size+1;如果不存在相等的X,则new X,放到List<X>最后面
    所有数据遍历后,对List<X>,按照X.size进行冒泡排序或者快速排序。整个算法时间复杂度 n三次方(冒泡) 或者 n二次方logn (快排)
      

  5.   

    具体采用什么算法,与原数据量的大小、分布是否均匀等有很大的关系。如果数据量不大的话或者是分布在很小的范围,则一开始用hash方式进行存储,然后在转换成列表进行排序,时间复杂度接近n+n*logn
    如果数据量很大(亿级别以上且数据相对分散),则采用数组进行存储,下标就是数字,统计完了次数之后然后再排序。这种做法对内存消耗比较大。时间复杂度依然是接近n+n*logn