js使用简单的冒泡排序遇到一个问题,就是就是循环内容多的时候,网页变得很卡。
然后就去晚上搜索了一些快速排序方法,速度大大提高了
并且改成自己能用的
/******************************
*
* 快速排序
* @param arr 比较数组
* @param method 自定义比较方法
* @returns
*/
function quickSort(arr,method) {
function swap(arr, i, k) {//调换数据位置
var temp = arr[i];
arr[i] = arr[k];
arr[k] = temp;
} // 数组分区,左小右大
function partition(arr, left, right) {
var storeIndex = left;
var pivot = arr[right]; // 直接选最右边的元素为基准元素
for(var i = left; i < right; i++) {
var bool = false;
if(method == null){//使用默认的数组比较处理
if(arr[i] < pivot){
bool = true;
}else{
bool = false;
}
}else{
bool = method(arr[i],pivot);//使用用户自定义的比较处理
}
if(bool) {//开始比较
swap(arr, storeIndex, i);
storeIndex++; // 交换位置后,storeIndex 自增 1,代表下一个可能要交换的位置
}
}
swap(arr, storeIndex, right); // 将基准元素放置到最后的正确位置上
return storeIndex;
}
function sort(arr, left, right) {
if(left > right) {
return;
}
var storeIndex = partition(arr, left, right);
sort(arr, left, storeIndex - 1);
sort(arr, storeIndex + 1, right);
}
sort(arr, 0, arr.length - 1);
return arr;
}
/***************************
* 自定义比较处理方式
* @param obj1 对象1 {"id"1,...}
* @param obj2 对象2 {"id:2,...}
* @returns {Boolean}
*/
function mySort(obj1,obj2){
if(obj1.id < obj2.id){
return true;
}else{
return false;
}
}
var myList=[{"id":2,"name":"张三"},{"id":1,"name":"李四"}];
myList = quickSort(myList,mySort);
至于这个快速排序的原理,可以看原文