/**
* @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;
else
low = 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;
}
//最后一个空位留给key
arry[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);