博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jQuery插件Asgrid添加表头排序的功能
阅读量:6364 次
发布时间:2019-06-23

本文共 2491 字,大约阅读时间需要 8 分钟。

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

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

       快速排序在平均状况下,排序 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);        }

 

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

转载地址:http://onama.baihongyu.com/

你可能感兴趣的文章
StretchDIBits速度测试(HALFTONE)
查看>>
在.NET Workflo“.NET研究”w 3.5中使用多线程提高工作流性能
查看>>
验证Oracle处理速度
查看>>
自己写一个jquery
查看>>
BGP聚合attribute-map
查看>>
艾伟:C#中抽象类和接口的区别
查看>>
Flink - NetworkEnvironment
查看>>
BZOJ4374 : Little Elephant and Boxes
查看>>
【.Net Framework 体积大?】不安装.net framework 也能运行!?开篇叙述-1
查看>>
LLDP协议、STP协议 笔记
查看>>
tomcat中的Manager App帐号password管理
查看>>
如何使用 GroupBy 计数-Count()
查看>>
有了这个课件制作工具,还怕备课有难题?
查看>>
SharpGL学习笔记(十三) 光源例子:环绕二次曲面球体的光源
查看>>
jquery之clone()方法详解
查看>>
Delphi 用文件流读取文本文件字符串的方法
查看>>
修改input框默认黄色背景
查看>>
php中怎么导入自己写的类
查看>>
C# 委托
查看>>
Using Information Fragments to Answer the Questions Developers Ask
查看>>