Skip to content
导航栏

问题: 实现一个 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));

思路

  1. 定义头尾指针
  2. 根据判断值是否满足题目要求,将头尾指针一步步往前移. 满足条件则交换头尾指针位置的值
  3. 推荐使用while循环, 因为不知道此场景需要判断多少次. 而如果使用for循环来做这个题目, 则需要更多的