快排思路
快速排序是用的最频繁的一种排序方法,在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;
}