程序实现对数据排序并按出现次数进行排序 程序实现对数据排序并按出现次数进行排序(注:用面向对象的方式实现,用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;

}

}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值