Spring中对List的快速排序

快排思路

在这里插入图片描述
快速排序是用的最频繁的一种排序方法,在Spring项目中跑不了,在做RestFul类型的接口时其实现十分重要。

排序算法 平均时间复杂度 最坏时间复杂度 最好时间复杂度 空间复杂度 稳定性
快速排序 O(N*LogN) O(n2) O(N*logN) O(N*logN) 不稳定

那么对List<Model>类型的数据如何排序呢?
我在项目中对List数据进行排序,比较的是模型中sum属性,下面代码一目了然,十分方便。

RestController节选

/**
        * (排序后)按照终端地址进行运行状态的分组统计,包括分组地区、挂在数量、运行数量、停止数量、维修数量
        * @author 张超 teavamc
        * @date 2019/2/13
        * @param []
        * @return com.ruoyi.api.domain.RongApiRes
        */
    @CrossOrigin
    @GetMapping("/sumtermSort")
    @ApiOperation(value = "(排序后)按照终端地址进行运行状态的分组统计,包括分组地区、挂在数量、运行数量、停止数量、维修数量")
    public RongApiRes sumtermSort(){
        List<Tersga> pre = managementService.sumterm();
        int start = 0;
        int end = pre.size()-1;
        quickSort(pre,start,end);
        return RongApiService.get_list(pre);
    }


    /**
        * 对List<Tersga>数据结构按照Tersga的Sum熟悉进行排序
        * @author 张超 teavamc
        * @date 2019/2/13
        * @param [list, start, end]
        * @return void
        */
    public void quickSort(List<Tersga> list,int start,int end){
//        1、确定起始下标,默认Index=0处为基准值
//        2、若左右下标未相遇,右侧下标向左走,若遇到小于基准值的则停止;左侧下标向右走,若遇到大于基准值的则停止
//        3、交换左右下标的值,确保第一次左右下标相遇时,左侧值均小于等于基准值,右侧值均大于等于基准值
//        4、左右下标若相遇,交换基准值与其位置的值,完成第一次相遇,再使用分治递归处理左右两部分
        if (start < end){
            int left = start;
            int right = end;
            while (left != right){
                while (list.get(right).getSum() >= list.get(start).getSum() && right > left){
                    right--;
                }
                while (list.get(left).getSum() <= list.get(start).getSum() && right > left){
                    left++;
                }
                if (right > left){
                    Collections.swap(list,left,right);
                }
            }
            Collections.swap(list,left,start);
            quickSort(list,start,left-1);
            quickSort(list,right+1,end);
        }
    }

模型实体节选

public class Tersga {
    private static final long serialVersionUID = 1L;

    /** 分组名称 */
    private String aname;
    /** 总数 */
    private int sum;
    /** 运行数量 */
    private int run;
    /** 停止数量 */
    private int down;
    /** 维修数量 */
    private int req;

    public String getAname() {
        return aname;
    }

    public void setAname(String aname) {
        this.aname = aname;
    }

    public int getSum() {
        return sum;
    }

    public void setSum(int sum) {
        this.sum = sum;
    }

    public int getRun() {
        return run;
    }

    public void setRun(int run) {
        this.run = run;
    }

    public int getDown() {
        return down;
    }

    public void setDown(int down) {
        this.down = down;
    }

    public int getReq() {
        return req;
    }

    public void setReq(int req) {
        this.req = req;
    }
发布了104 篇原创文章 · 获赞 264 · 访问量 54万+

猜你喜欢

转载自blog.csdn.net/teavamc/article/details/87210303