function quickly(arr) {
if (arr.length < 2) {
return arr;
}
var left = [];
var right = [];
var mid;
if (arr.length % 2 != 0) {
mid = (arr.length + 1) / 2;
} else {
mid = arr.length / 2;
}
var leg = arr[mid];
for (var i = 0; i < arr.length; i++) {
if (arr[i] < arr[mid] && mid != i) {
left.push(arr[i]);
} else if (arr[i] >= arr[mid] && mid != i) {
right.push(arr[i])
}
}
return quickly(left).concat(leg).concat(quickly(right));
}
var arr = [12, 3, 45, 6, 3, 5, 6]
console.log(quickly(arr));
快速排序是从中间划分大小,大小分开两边,建立两个单独的数组,然后在单独的数组中进行递归,使每个数都被单独分开,最后将左中右三部分进行拼接导出最终的数据。递归停止的条件是每个数都单独被划分出来,也就是函数内数组的长度小于2。在确定中间值的时候,为了防止是奇数造成漏洞,可以先去判断当前数组的个数,若是奇数则进行(+1)/2的操作,确保中间值肯定是整数,接着利用循环将当前数组继续分为左右两个数组,依次类推。为了确保不会出现重复,循环里边的判断条件需要加一句中间值不等于当前的下标值。