1. 程式人生 > >程式實現對資料排序並按出現次數進行排序 目錄 1. 題目程式實現對資料排序並按出現次數進行排序 1 2. 思路 2 3. 效果 2 4. 程式碼 /00listPrj/src/Sort.java 2

程式實現對資料排序並按出現次數進行排序 目錄 1. 題目程式實現對資料排序並按出現次數進行排序 1 2. 思路 2 3. 效果 2 4. 程式碼 /00listPrj/src/Sort.java 2

程式實現對資料排序並按出現次數進行排序

 

目錄

1. 題目程式實現對資料排序並按出現次數進行排序 1

2. 思路 2

3. 效果 2

4. 程式碼 /00listPrj/src/Sort.java 2

 

 

  1. 題目程式實現對資料排序並按出現次數進行排序

程式實現對資料排序並按出現次數進行排序(注:用面向物件的方式實現,用for迴圈進行排序,別用comparable介面實現){1,4,2,1,3,2,1,4}作為引數(引數可變)傳入java方法中,控制檯輸出以下結果

1出現了3次

2出現了2次

4出現了2次

3出現了1次

 

 

 

  1. 思路

資料排序

Groupby分組聚合操作(數字,次數)

倒排序操作(按照次數)

 

  1. 效果

 

  1. 程式碼 /00listPrj/src/Sort.java

 

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;

 

import com.alibaba.fastjson.JSON;

@SuppressWarnings("all")

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;

 

 

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 聚合操作,獲取元素和出現次數

List<Map> rzt = getKeyAndCount_groupbyKey(array);

System.out.println( JSON.toJSONString(rzt, true));

 

//執行排序 ,按照出現次數

List<Map> rzt_final = orderByCountDesc(rzt);

System.out.println( JSON.toJSONString(rzt_final, true));

 

 

 

 

 

//輸出結果

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> intElementKeySet = getKeySet(array, array.length);

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

for (Integer k : intElementKeySet) {

Map m = new LinkedHashMap<>();

m.put("num", k);

//做了count聚合運算

m.put("count", count(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;

}

}

}

}

//根據count欄位倒排列表

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 count(Integer k, int[] array) {

int cnt = 0;

for (int i : array) {

if (k == i)

cnt++;

}

return cnt;

}

}