JavaScript数组奇偶数排序,奇数在前,偶数在后,要求不新建数组。

例如:[1, 2, 3, 4, 5]排序后:1, 3, 5, 2, 4
注意:要求不新建数组,即在原数组的基础上更改。

阅读 1.7k
评论
    4 个回答

    如果对奇数间的顺序,和偶数间的顺序不需要和原来保持一致的话,可以参考快排的思想
    一个指针从左往右搜,一个指针从右往左搜,当左边找到偶数,右边找到奇数时,交换两个数,然后继续查找,直到两个指针相同

      冒泡排序

      let arr = [1, 2, 3, 4, 5, 7, 9, 10, 13, 18];
      
      for (let i = 0; i < arr.length - 1; i++) {
          for (let j = 0; j < arr.length - i - 1; j++) {
              let tmp = arr[j];
              if (tmp % 2 === 0 && arr[j + 1] % 2 !== 0) {
                  arr[j] = arr[j + 1];
                  arr[j + 1] = tmp;
              }
          }
      }
      
      console.log('arr', arr);//[ 1, 3, 5, 7, 9, 13, 2, 4, 10, 18 ]
      

      我一开始也以为sort会创建新数组,原来不会

      let arr = [1, 2, 3, 4, 5, 7, 9, 10, 13, 18];
      
      arr.sort((a, b) => {
          if (a % 2 === 0) {
              if (b % 2 !== 0) {
                  return 1;
              }
              return 0;
          } else
              return -1
      })
      
      console.log('arr', arr);//[ 1, 3, 5, 7, 9, 13, 2, 4, 10, 18 ]

      测试了一下sort是真的快,看样子以后不需要用原生的。Array.prototype.sort 排序算法

        • 3.2k

        [1, 2, 3, 4, 5].sort(function(a, b){ / 里面就不写了 / })

          arr.sort(a => a%2 === 0); 但这种是不稳定排序, 因为sort内部使用快排, 快排本身不稳定.
          需要稳定排序的话就归并或者冒泡这些, 判断条件改一下即可

            撰写回答

            登录后参与交流、获取后续更新提醒

            相似问题
            推荐文章