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);
至于这个快速排序的原理,可以看原文