奇妙的算法-条件排序

Posted mufasa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了奇妙的算法-条件排序相关的知识,希望对你有一定的参考价值。

  某公司有N名员工。给定所有员工工资清单,财务人员要按照特定的顺序排列员工的工资。他按照工资的频次降序排列,即给定清单中所有频次较高的工资在频次较低的工资之前出现。如果相同数量的员工都有相同的工资,则按照给定清单中该工资第一次出现的排序排列。

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
 */

 

以上是关于奇妙的算法-条件排序的主要内容,如果未能解决你的问题,请参考以下文章

条件期望求解快速排序算法复杂度

数据结构-排序算法总结

排序算法系列——快速排序

算法图解之快速排序

算法之快速排序(递归实现)

计数排序 - 算法数据结构面试分享