/*** @author wsf 数据分组,排序js*/
;
(function(win, $) {var _jsUtils = null;if(jsUtils)_jsUtils = new jsUtils();//js工具对象//分组排序对象function groupSorter() {//数据this.data = null;//排序方式this.sortType = [ 'asc', 'desc' ];//默认排序方法this.defaultsortType = this.sortType[0];//排序名称this.sorteName = null;//分组名称this.groupName = null;}//原型对象groupSorter.prototype = {//构造函数constructor : groupSorter,//所有操作前的数据检测dataCheck : function() {var _isAry = _jsUtils.isArray(this.data);//是否是数组var _isJSON = _jsUtils.isJSON(this.data[0]);//是否是json数组if (_isAry) {this.isAry = true;} else if (_isJSON) {this.isJSONAry = true;} else {throw new Error("数据有误!");}this.checked = true//已经做过数据检查},//线性查找lineSearch : function(key, val) {var i = this.data.length - 1;do {var _a = val?this.data[i--][val]:this.data[i--];var _b = val?this.data[key]:key;if (_a === _b)return i + 1;} while (i >= 0);return -1;},//二分查找 (必须为有序可比较数组)binarySearch : function(key, val) {var low = 0, high = this.data.length - 1;do {var mid = Math.floor((low + high) / 2);var mdata = val?this.data[mid][val]:this.data[mid]+"";key = val:this.data[key]:key+"";//向下取整数if (key === mdata)return val?this.data[mid]:mid;if (key.localeCompare(mdata) < 0)high = mid - 1;elselow = mid + 1;} while (low <= high);return -1;},//原生js排序systemSorter:function (sortName){this.data.sort(function (a,b){var _a = sortName?a[sortName]:a+"";var _b = sortName?b[sortName]:b+"";var _f = this.sortType == "asc"?_a.localeCompare(_b):_b.localeCompare(_a); return _f;});},//冒泡排序(数据量小的时候用【数据量大时效率差】)bubbleSorter:function (sortName){var i = 0,arry = this.data,len = arry.length,j,d;for(;i<len;i++){for(j=0;j<len;j++){var d1 = sortName?array[i][sortName]:arry[i]+"";var d2 = sortName?array[j][sortName]:arry[j]+"";var _ret = this.sortType == "asc" ? d1.localeCompare(d2)<0:d1.localeCompare(d2)>0;if(_ret){d = arry[i];arry[j] = arry[i];arry[i] = d;}}}},//快速排序(效率最好)quickSort:function (sortName){var i = 0,arry = this.data,j=arry.length-1//排序实现var sorter = function (i,j){if(i==j){return;}var key = sortName?array[i][sortName]:arry[i];var stepi = i;//记录开始位置var stepj = j//记录结束位置while(j>i){var d1 = sortName?array[j][sortName]:arry[j]+"";key = key+"";if(d1.localeCompare(key)>=0){j--;}else{arry[i] = arry[j];while(j>i++){if(d1.localeCompare(key)>0){arry[j] = arry[i];break;}}}}//如果第一个取出的key是最小数if(stepi == i){soter(++i,stepj);return;}//最后一个空位留给keyarry[i] = key;sorter(stepi,i);sorter(j,stepj);}sorter(i,j);}}win.groupSorter = groupSorter;//外部调用入口/*** 调用方式* var _sorter = new groupSorter();* _sorter.data = yourData;* _sorter.quickSort(sortName);*/
})(window,jQuery);