美文网首页
数组内奇偶数分离

数组内奇偶数分离

作者: ONEay | 来源:发表于2018-09-10 22:37 被阅读0次

    数组内奇偶数分离(奇数在前)

    • 数组:[1, 2, 3, 4, 5, 6, 7, 8, 9]
    • 结果:[1, 3, 5, 7, 9,...]

    思路1:

    private static void sort(int[] val) {
        int len = val.length;
    //表示偶数的下标
        int a = 0;
    //从下标为1处开始遍历,遍历到奇数时,与a交换
        int b = 1;
        for (; b < len ; b++) {
    //当前位置数为奇数,不需要交换,继续寻找偶数。(a++)
          if (val[a] % 2 != 0){
            a++;
          }
    
          if (val[b] %2 != 0){
            int temp = val[a];
            val[a] = val[b];
            val[b] = temp;
    //继续寻找下一个偶数
            a++;
          }
        }
    
        System.out.println(Arrays.toString(val));
      }
    
    • 聪明的你会发现上边的结果,并没有实现对偶数进行排序。

    思路2:

    从结果入手,我们想要的结果数组:[1, 3, 5, 7, 9, 2, 4, 6, 8]
    可以先遍历一次数组,确定奇数的个数。在遍历一次数组确定此数为奇数还是偶数,填充到另一个新数组中,实现排序。前提是数组有序。

    public static void sort2(int[] args) {
        int len = args.length;
        int b = 0 ;
    //确定奇数个数
        for (int i = 0; i < len; i++) {
          if (args[i] % 2 != 0){
            b++;
          }
        }
    //此时,b为我们想要的结果数组中偶数的开始下标。
        Arrays.sort(args);
        int[] result = new int[len];
        int a= 0;
        for (int i = 0; i < len; i++) {
          if (args[i] % 2 ==0 ){
    //偶数
            result[b] = args[i];
            b++;
          }else {
    //奇数
            result[a] = args[i];
            a++;
          }
        }
    
        System.out.println(Arrays.toString(result));
      }
    

    相关文章

      网友评论

          本文标题:数组内奇偶数分离

          本文链接:https://www.haomeiwen.com/subject/szbegftx.html