拖动排序的后台处理
有时候总是要用到排序,一下总结了两种排序的算法。
(待排序的实体对象有有个序号字段)
1、把一对象排在目标对象之上;可以跨级排序。排序之后目标对象的序号总是排在被排序的对象之后。
// 目标序号
Integer intMuBiaoXuHao = mubiaoYh.getYhXh();
TYh tyh = tyhDAO.findById(myh.getYhId());//待排序的对象
String JPQL_JIA = "update TYh model set model.yhXh = model.yhXh + 1 where model.yhXh >= ? and model.tbmByyhBmid.classId = " + myh.getYhBmid();
String JPQL_JIAN = "update TYh model set model.yhXh = model.yhXh - 1 where model.yhXh >= ? and model.tbmByyhBmid.classId = " + tyh.getTbmByyhBmid().getClassId();
if (intMuBiaoXuHao - 1 > tyh.getYhXh() && myh.getYhBmid().equals(tyh.getTbmByyhBmid().getClassId())) {
tyhDAO.executeByJPQL(JPQL_JIA, intMuBiaoXuHao);
tyhDAO.executeByJPQL(JPQL_JIAN, tyh.getYhXh());
myh.setYhXh(intMuBiaoXuHao - 1);
} else if (intMuBiaoXuHao < tyh.getYhXh() || !myh.getYhBmid().equals(tyh.getTbmByyhBmid().getClassId())) {
tyhDAO.executeByJPQL(JPQL_JIAN, tyh.getYhXh());
tyhDAO.executeByJPQL(JPQL_JIA, intMuBiaoXuHao);
myh.setYhXh(intMuBiaoXuHao);
}tyhDAO.update(tyh);我采用的是spring和jap做的,此处只介绍算法思路。配置就免了。
2、也就是很普通的替换排序,一个对象替换了另一个对象的位置,当目标序号>原始序号,小于等于目标序号的对象序号都-1,当目标序号<原始序号,大于等于目标序号的对象序号都+1。代码:
Integer intMuBiaoXuHao = 0;
TXx txx = txxDAO.findById(xxId);
TXx txxnew = txxDAO.findById(xxNewId);//被替换的目标选项
intMuBiaoXuHao = txxnew.getXxXh();//新序号,目标序号
String JPQL_JIA = "update TXx model set model.xxXh = model.xxXh + 1 where model.xxXh >= ? and model.xxLx ='"+txx.getXxLx()+"'";
String JPQL_JIAN = "update TXx model set model.xxXh = model.xxXh - 1 where model.xxXh >= ? and model.xxLx ='"+txx.getXxLx()+"'";
if (intMuBiaoXuHao > txx.getXxXh() ) {//目标序号大于原始序号
txxDAO.executeByJPQL(JPQL_JIAN, txx.getXxXh());
txxDAO.executeByJPQL(JPQL_JIA, intMuBiaoXuHao);
} else if (intMuBiaoXuHao < txx.getXxXh()) {//目标序号小于原始序号
txxDAO.executeByJPQL(JPQL_JIA, intMuBiaoXuHao);
txxDAO.executeByJPQL(JPQL_JIAN, txx.getXxXh()+1);
}
txx.setXxXh(intMuBiaoXuHao);
txxDAO.update(txx); 相关推荐
lixiaotao 2020-10-07
美丽的泡沫 2020-09-08
nongfusanquan0 2020-08-18
hang0 2020-08-16
earthhouge 2020-08-15
算法改变人生 2020-07-28
troysps 2020-07-19
Broadview 2020-07-19
chenfei0 2020-07-18
风吹夏天 2020-07-07
yangjingdong00 2020-07-05
数据与算法之美 2020-07-05
shawsun 2020-07-04
数据与算法之美 2020-07-04
要知道时间复杂度只是描述一个增长趋势,复杂度为O的排序算法执行时间不一定比复杂度为O长,因为在计算O时省略了系数、常数、低阶。实际上,在对小规模数据进行排序时,n2的值实际比 knlogn+c还要小。
Evankaka 2020-07-04
田有朋 2020-06-28