• jQuery插件Asgrid添加表头排序的功能


           在完成了Asgrid的基本功能后,还需要一个排序的功能。回想一下数据结构和算法,有很多的排序算法。在维基百科上找到的排序算法

    image

           在这里并不需要很复杂的排序,在这里我选择了快速排序算法

           快速排序在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。

      添加表头点击事件

           首先给控件添加两个新的参数用来记录当前的排序状态:

               storKey :记录当前点击的表头列

               order:记录当前排序,有两个值asc,desc

           点击事件代码:

     $(".AsGrid_head_col").click(function () {
                        if (!def.data || def.data.length <= 1)
                            return;
    
                        var index = $(".AsGrid_head_col").index($(this));
                        if (index < 0)
                            return;
                             
                        if (!def.columns[index].checkbox) {
                            var key = def.columns[index].field;
    
                            if (def.storKey == key) {
                                //反向排序
                                def.order = def.order == 'asc' ? 'desc' : 'asc';
                            }
                            else {
                                def.storKey = key;
                                def.order = 'asc';
                            }
                            $(".head_ts").removeClass("head_ts_asc head_ts_desc");
    
                            $(this).find(".head_ts").addClass("head_ts_"+def.order);
    
                            quickSort(def.data, def.storKey, def.order, 0, def.data.length - 1);
    
                            methods.loadData(tb, def.data);
                        }
         

             其中quickSort为快速排序算法

    排序算法

     function quickSort(arr, key, order, low, high)

    arr  :要排序的数组

    key:当前需要排序的列主键

    order:正序(asc)还是反序(desc)

    low:开始值

    high:结束值

     function quickSort(arr, key, order, low, high) {
            if (arr.lenght <= 1)
                return;
            if (low < high) {
                var pivot = arr[low];
                var i = low;
                var j = high;
                if (order == 'asc') {
                    while (i < j) {
                        while (i < j && arr[j][key] >= pivot[key]) j--;
                        arr[i] = arr[j];
                        while (i < j && arr[i][key] <= pivot[key]) i++;
                        arr[j] = arr[i];
                    }
                    arr[i] = pivot;
                }
                else {
                    while (i < j) {
                        while (i < j && arr[j][key] <= pivot[key]) j--;
                        arr[i] = arr[j];
                        while (i < j && arr[i][key] >= pivot[key]) i++;
                        arr[j] = arr[i];
                    }
                    arr[i] = pivot;
    
                }
    
                quickSort(arr, key, order, low, i - 1);
                quickSort(arr, key, order, i + 1, high);
            }

          一个没什么难度的算法,搞了半天,记录一下。

  • 相关阅读:
    Vue浏览器调试工具VueTools安装以及使用
    克莱姆法则 学习
    IfcFacetedBrep —Example Basin faceted brep
    行列式学习
    matlab矩阵旋转任意角度的函数 imrotate
    matlab双杆系统的支撑反力 学习
    matlab矩阵运算——乘法、除法学习
    matlab求航线图问题 学习
    matlab范德蒙矩阵生成学习
    matlab特殊矩阵生成学习
  • 原文地址:https://www.cnblogs.com/ac1985482/p/3067015.html
Copyright © 2020-2023  润新知