zoukankan      html  css  js  c++  java
  • 【js】多维排序

        var list = [];
            for(var i=0;i<100;i++){
                list.push({x:parseInt(Math.random()*5),y:parseInt(Math.random()*5),z:parseInt(Math.random()*5)})
            }
           
            console.info(list)
            mdSort(list,["x","y","z"])
            console.info(list)
            /*
                list 待排序集合,例如  [{x:1,y:2,z:3},{...}]  
                plist 排序的属性名,例如  ["x","y","z"]   
            */
            function mdSort(list,plist){
                if(list==null||list.length==0||plist==null||plist.length==0){
                    return;
                }
                sort(list,0,list.length-1,plist[0]);
                for(var i=1;i<plist.length;i++){
                    sort2(list,plist[i-1],plist[i])
                }
                function sort2(list,p1,p2){
                    var start=0;
                    for(var i=1;i<list.length;i++){
                        if(list[i][p1]!=list[i-1][p1]){
                            sort(list,start,i-1,p2)
                            start = i;
                        }
                        if(i==list.length-1){
                            sort(list,start,i,p2);
                        }
                    }
                }
                function sort(list,start,end,p){
                    if(end-start<1){
                        return;
                    }
                    var L=start;
                    var R=end;
                    var temp=list[start];
                    while(L!=R){
                        while(R>L){
                            if(list[R][p]<temp[p]){
                                list[L]=list[R]
                                break;
                            }
                            R--;
                        }
                        while(L<R){
                            if(list[L][p]>temp[p]){
                                list[R]=list[L]
                                break;
                            }
                            L++;
                        }
                    }
                    list[R]=temp;
                    sort(list,start,R-1,p);
                    sort(list,R+1,end,p);
                }
            }
  • 相关阅读:
    Keil MDK中单个c文件生成LIB文件
    STM32标准外设库、 HAL库、LL库
    STM32CubeMX介绍、下载与安装
    static关键字的总结
    Qt中 QString 转 char*
    字符串(string)与整型(int)、浮点型(float)等之间的转换
    RF相关知识
    Qt4问题集锦
    Qt4程序在windows平台下打包发布
    (81)Client、Server通信模式和P2P通信模式的区别
  • 原文地址:https://www.cnblogs.com/LightChan/p/7955244.html
Copyright © 2011-2022 走看看