奇妙的算法【5】-條件排序

  某公司有N名員工。給定全部員工工資清單,財務人員要按照特定的順序排列員工的工資。他按照工資的頻次降序排列,即給定清單中全部頻次較高的工資在頻次較低的工資以前出現。若是相同數量的員工都有相同的工資,則按照給定清單中該工資第一次出現的排序排列。java

package com.cnblogs.mufasa.help;

import java.util.ArrayList;
import java.util.List;

public class Answer2 {
    public List<Integer> salaryfrequeny(int num, int[] salaries){
        List<Integer> dataOut=new ArrayList<>();
        List<Integer> nums=new ArrayList<>();
        for(int i=0;i<num;i++){
            if(!dataOut.contains(salaries[i])){//不存在
                dataOut.add(salaries[i]);
                nums.add(1);
            }else {//存在
                int index=dataOut.indexOf(salaries[i]);
                nums.set(index,nums.get(index)+1);
            }
        }
        //冒泡排序【可使用其餘排序方法加快速度】
        for(int i=0;i<dataOut.size()-1;i++){//【算法複雜度,O(2^n)】
            for(int j=0;j<dataOut.size()-1-i;j++){
                if(nums.get(j)<nums.get(j+1)){
                    int temp=nums.get(j);
                    nums.set(j,nums.get(j+1));
                    nums.set(j+1,temp);

                    int temp1=dataOut.get(j);
                    dataOut.set(j,dataOut.get(j+1));
                    dataOut.set(j+1,temp1);
                }
            }
        }
        List<Integer> arr=new ArrayList<>();//還原所需數據
        for (int i=0;i<dataOut.size();i++){
            for (int j=0;j<nums.get(i);j++){
                arr.add(dataOut.get(i));
            }
        }
        return arr;
    }
}

class Client{
    public static void main(String[] args) {
        int num=19;
        int[] salaries={1,2,4,3,3,3,4,2,5,5,5,5,6,6,6,7,8,9,10};
        Answer2 as=new Answer2();
        List<Integer> list=as.salaryfrequeny(num,salaries);
        list.forEach((temp)->{
            System.out.print(temp+"-");
        });
    }
}
/*
19
1,2,4,3,3,3,4,2,5,5,5,5,6,6,6,7,8,9,10
 */
相關文章
相關標籤/搜索