-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy path82.js
More file actions
30 lines (23 loc) · 1.1 KB
/
Copy path82.js
File metadata and controls
30 lines (23 loc) · 1.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**
完成一个函数 partition3way,它接受一个数组作为参数。它会搬动数组中的元素,使得所有小于第一个项的元素都搬动到它的左边,所有大于第一个项的元素都搬动到右边,等于它的都放在中间。例如:
const arr = [3, 1, 3, 6, 2, 3, 4, 5]
partition3way(arr)
console.log(arr) // => [2, 1, 3, 3, 3, 6, 4, 5] or [1, 2, 3, 3, 3, 4, 5, 6]
输入的数组的第一个项是 3,所以最后小于 3 的 1、2 的都到了左边,大于 3 的 4, 5, 6 都到了右边,3 都放在了中间。
请你在不能使用任何数组原生方法,只能使用循环和赋值的情况下完成 partition3way 函数。
*/
const partition3way = (arr) => {
const swap = (arr, i, j) => [arr[i], arr[j]] = [arr[j], arr[i]];
const prior = arr[0];
let i = 0;
let k = 1;
let j = arr.length - 1;
while(k <= j) {
if (arr[k] < prior) swap(arr, i++, k++);
else if(arr[k] > prior) swap(arr, k, j--);
else k++
}
}
const arr = [3, 1, 3, 6, 2, 3, 4, 5]
partition3way(arr)
console.log(arr) // => [2, 1, 3, 3, 3, 6, 4, 5] or [1, 2, 3, 3, 3, 4, 5, 6]