问题: 实现一个 010101010 排序算法 ,将 0 排在前面,1 排在后面
js
const arr = [0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0];
const sort = (arr) => {
let i = 0;
let j = arr.length - 1;
while (i < j) {
if (arr[i] === 0) {
i++;
} else {
[arr[i], arr[j]] = [arr[j], arr[i]];
j--;
}
}
return arr;
};
console.log(sort(arr));
思路
- 定义头尾指针
- 根据判断值是否满足题目要求,将头尾指针一步步往前移. 满足条件则交换头尾指针位置的值
- 推荐使用
while
循环, 因为不知道此场景需要判断多少次. 而如果使用for
循环来做这个题目, 则需要更多的