const arr = [5, 2, 1, 8, 3] function quick (arr) { if (arr.length <= 1) return arr const mid = Math.floor(arr.length / 2) const midValue = arr.splice(mid, 1)[0] let left = [] let right = [] for (let i = 0; i < arr.length; i++) { arr[i] < midValue ? left.push(arr[i]) : right.push(arr[i]) } return quick(left).concat(midValue, quick(right)) } console.log(quick(arr))