求个排序算法 - V2EX
请不要在回答技术问题时复制粘贴 AI 生成的内容
jianghu52

求个排序算法

  •  
  •   jianghu52 Sep 11, 2013 2809 views
    This topic created in 4650 days ago, the information mentioned may be changed or developed.
    有数组如下
    a_list={
    [0]=>1,1,radio1;
    [1]=>2,0,text;
    [2]=>4,2,radio2
    [3]=>5,1,radio3;
    [4]=>6,2,radio4;
    [5]=>7,1,checkbox1;
    [6]=>8,2,checkbox2;
    [7]=>11,1,checkbox11;
    }
    解释下这个二维数组。整个数组表示的一些控件在页面中的分布顺序。
    第一维是控件在数据库中的物理顺序。
    第二维,
    第一项:控件在页面显示的顺序(唯一,但是不连贯)
    第二项:控件归属的组,比如radio1同radio3是归属一组的。checkbox1与checkbox11也是一组
    第三项:控件名
    希望有个算法能得到如下结果
    a_list={
    [0]=>1,1,radio1;
    [1]=>5,1,radio3;
    [2]=>2,0,text;
    [3]=>4,2,radio2
    [4]=>6,2,radio4;
    [5]=>7,1,checkbox1;
    [6]=>11,1,checkbox11;
    [7]=>8,2,checkbox2;
    }
    即:radio或者checkbox存在的情况下,以该控件为基准,同组的控件位置提前,其他控件位置依次向后窜。
    我现在的做法很笨:
    1.查询数据库得到radio跟checkbox的两个数组。每个数组分别保存了位置最小,而且归属组不同的控件。具体到这个例子。
    radio_list{
    [0]=>1,1,radio1;
    [1]=>4,2,radio2
    }
    checkbox_list{
    [0]=>7,1,checkbox1;
    [1]=>8,2,checkbox2;
    }
    2.分别循环每个数组,然后再在里面做冒泡排序。(当然,还有要判断先循环谁的问题)
    以这个例子来说,我要做4次冒泡才能得到最后的目标数组。
    想请问还有没有更加快捷的办法能得到最后的目标数组。
    3 replies    1970-01-01 08:00:00 +08:00
    iloahz
        1
    iloahz  
       Sep 11, 2013   1
    先将每类控件单独排序,这个在数据库那层做应该很方便吧,然后跑多路归并就好了。这样应该是逻辑最简洁的了,O(nlogn + nlogk)的时间复杂度,O(n)的额外空间,其中k为控件类别数。

    个人更偏向这样:

    1. 扫一遍得到每类控件的最小位置
    2. 自定义compare函数:
    1. 若最小位置不同,返回最小位置小的
    2. 返回位置小的
    3. 跑快排

    这样时间复杂度是O(n + nlogn),O(k)的额外空间,而且目测实际运行比前面那个算法快。
    jianghu52
        2
    jianghu52  
    OP
       Sep 11, 2013
    @iloahz 恩,看起来确实有点快。我sql不是很强,一直不是很敢用sql完成业务逻辑。都是放在php这边做的。我试试看用sql的思路来排序看看
    yyai3
        3
    yyai3  
       Sep 11, 2013   1
    尝试:SELECT c1 FROM t1 order by left(c1,4),c1
    About     Help     Advertise     Blog     API     FAQ     Solana     5369 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 39ms UTC 07:45 PVG 15:45 LAX 00:45 JFK 03:45
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86