**题目: ** 给你一个整数数组 nums,请你将该数组升序排列。
看下快排
function quickSort(arr) {
let len = arr.length;
if( len < 2 ) {
return arr;
}
const left = [];
const right = [];
let curIdx = Math.floor(len / 2);
let curVal = arr[curIdx];
for(let i = 0; i < len; i++) {
if(arr[i] < curVal) {
left.push(arr[i])
} else {
right.push(arr[i])
}
}
return quickSort(left).concat(curVal, quickSort(right));
}
上述是快排空间换时间的思路.
接下来看下partition的思路:
function partition(arr, l, r) {
let pivot = arr[r]
let less = l - 1; // less区域指针
let more = r; // more区域指针
// l相当于等于区域右侧指针,即当前位指针
while(l < more) {
if(arr[l] < pivot) {
swap(arr, ++less, l++) // 小的数值要换到小数值区域指针后一位,也就是小数值区域扩展,l指针右移,处理下一项。
} else if(arr[l] > pivot) {
swap(arr, l, --more) // l指针停留,more指针前移
} else {
l++;
}
}
swap(arr, l, r) // l指针指向more指针指向相同
return [less+1, more] // 等于 pivot的数组索引
}
function quickSort(arr, left, right) {
if(left < right) {
let pivot = partition(arr, left, right);
quickSort(arr, left, pivot[0] - 1);
quickSort(arr, pivot[1] + 1, right);
}
}
———— 前端、Javascript实现、算法、刷题、leetcode