灵活使用快排排序多个条件的有序数组
快排原理:
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列.
详细快排:http://www.ruanyifeng.com/blog/2011/04/quicksort_in_javascript.html
//快排代码
var quickSort = function (arr) {
var sort = function (arr, left, right) {
if (left >= right)
return;
let i = left;
let j = right;
let baseVal = arr[j];
while (i <= j) {
while (i < j && arr[i] <= baseVal)
i++;
arr[j] = arr[i];
while (i < j && arr[j] >= baseVal)
j--;
arr[i] = arr[j];
}
arr[j] = baseVal;
sort(arr, left, j - 1);
sort(arr, j + 1, right);
}
let newArr = arr.concat();
sort(newArr, 0, arr.length);
return newArr;
}
在一个排序中我们往往有多个优先级的排序条件,那么应该怎么使用数组的排序方法呢?
/**
* @param {any[]} arr
* @param {function} sortFun
* @return {any[]}
*/
var test = function (arr: any[], sortFun) {
//多条件排序
arr.sort((a, b) => {
if (a.x != b.x)
return a.x - b.x;
if (a.xx != b.xx)
return a.xx - b.xx;
})
}
//多条件使用模板
arr.sort((a, b) => {
if (条件1)
return 条件1排序;
if (条件2)
return 条件2排序;
...
})