zoukankan      html  css  js  c++  java
  • 程序实现对数据排序并按出现次数进行排序 程序实现对数据排序并按出现次数进行排序(注:用面向对象的方式实现,用for循环进行排序,别用comparable接口实现){1,4,2,1,3,2,1,4}作为

    程序实现对数据排序并按出现次数进行排序

    程序实现对数据排序并按出现次数进行排序(注:用面向对象的方式实现,用for循环进行排序,别用comparable接口实现){1,4,2,1,3,2,1,4}作为参数(参数可变)传入java方法中,控制台输出以下结果

    1出现了3次

    2出现了2次

    4出现了2次

    3出现了1次

    import java.util.ArrayList;

    import java.util.HashSet;

    import java.util.Iterator;

    import java.util.LinkedHashMap;

    import java.util.LinkedHashSet;

    import java.util.List;

    import java.util.Map;

    import java.util.Set;

     

    public class Sort {

    public static void main(String[] args) {

    // 定义一个长度为10的数组;

    int[] array = new int[] { 1, 4, 2, 1, 3, 2, 1, 4 };

    // 数组的长度

    int length = array.length;

    System.out.println("原始数组元素顺序:  ");

     

    sortArray(array, length);

    System.out.println("\n冒泡排序后的数组元素顺序:");

    for (int m = 0; m <= length - 1; m++) {

    System.out.print(array[m] + "\t");

    }

     

    System.out.print("\r\n");

    //执行groupby 聚合操作,获取元素和出现次数

    Set<Integer> st = getKeySet(array, length);

    List<Map> rzt = getKeyAndCount_groupbyKey(array, st);

     

    //执行排序 ,按照出现次数

    List<Map> rzt_final = orderByCountDesc(rzt);

     

    //输出结果

    for (Map map : rzt_final) {

    try {

     System.out.println(map.get("num")+"出现了"+map.get("count")+"次");

    } catch (Exception e) {

    // TODO: handle exception

    }

     

    }

     

    }

     

    private static List<Map> getKeyAndCount_groupbyKey(int[] array, Set<Integer> st ) {

    List<Map> rzt = new ArrayList<>();

    for (Integer k : st) {

    Map m = new LinkedHashMap<>();

    m.put("num", k);

    m.put("count", getcount(k, array));

    rzt.add(m);

    // System.out.println(k+"出现了"+getcount(k,array)+"次");

    }

    return rzt;

    }

     

    private static Set<Integer> getKeySet(int[] array, int length) {

    Set<Integer> st = new LinkedHashSet<>();

     

    for (int m = 0; m <= length - 1; m++) {

    st.add(array[m]);

    }

    return st;

    }

     

    private static void sortArray(int[] array, int length) {

    // 数值中转变量

    int num = 0;

    // 将数组进行9次比较

    for (int n = 0; n <= length - 2; n++) {

    // 将数组内元素进行9次的两两比较

    for (int i = 0; i <= length - 2; i++) {

    if (array[i] > array[i + 1]) {

    // 比较大小后,进行位置互换

    num = array[i + 1];

    array[i + 1] = array[i];

    array[i] = num;

    }

    }

    }

    }

     

    private static List<Map> orderByCountDesc(List<Map> rzt) {

    List<Map> rzt_final = new ArrayList<>();

    for (int i = 0; i < 100; i++) {

    Map max = getMax(rzt);

    rzt_final.add(max);

    rzt.remove(max);

    }

    return rzt_final;

    }

     

    private static Map getMax(List<Map> rzt) {

    int maxcnt = 0;

    Map maxMap = null;

    for (Map map : rzt) {

    Integer cnt = (Integer) map.get("count");

    if (cnt > maxcnt) {

    maxMap = map;

    maxcnt = cnt;

    }

     

    }

    return maxMap;

    }

     

    private static Integer getcount(Integer k, int[] array) {

    int cnt = 0;

    for (int i : array) {

    if (k == i)

    cnt++;

    }

    return cnt;

    }

    }

     

  • 相关阅读:
    网络协议(一)HTTP请求报文(请求行、请求头、请求体),响应报文
    Java集合(五) Set 添加元素
    Java 泛型面试题
    并发编程-线程池(二)线程池回收线程
    Java(二)equal 和 hashcode使用
    Java 泛型(一)作用和使用
    Java排序(一)实现类的排序
    Java排序(二)排序算法的稳定性
    SDL 程序编译错误-undefined reference to `SDL_GetError'
    SDL程序编译错误-error: conflicting types for ‘_XData32’
  • 原文地址:https://www.cnblogs.com/attilax/p/15197400.html
Copyright © 2011-2022 走看看