有多个正整数存放在数组中,编写一个函数要求偶数在左边由小到大顺序放置,奇数在右边,也是由小到大顺序放置,Java实现...

思路:
* 1.首先分左右
* 2.分好再排序(左边和右边都单独排序)

 

第一步:分左右

可得注意了:

大体思路最先是从两头出发分成4种情况讨论(左or右,奇数or偶数)循环处理,出口是双层的嵌套循环(外面的循环条件可能已经失效)

所以以后凡是遇到嵌套循环一定要记得注意一下是否需要在内层加上外层判断条件(记不住可以自己慢慢debug)

 

public class page02 {
    public static void main(String[] args) {
        int[] nums = {1, 2, 49, 1, 52, 804, 0, 3, 76, 26, 2, 1, 2};
        devide(nums);
        range(nums);
        show(nums);
    }
private static void devide(int[] numbers) {
        int a = 0;
        int b = numbers.length - 1;
        while (a < b) {
            while (numbers[a] % 2 == 0 && numbers[b] % 2 == 0 && a < b) {
                //左右都是偶数
                a++;
            }
            while (numbers[a] % 2 != 0 && numbers[b] % 2 != 0 && a < b) {
                //左右都是奇数
                b--;
            }
            while (numbers[a] % 2 != 0 && numbers[b] % 2 == 0 && a < b) {
                //左边是奇数,右边是偶数
                //左边是偶数,右边是奇数
                int temp;
                temp = numbers[a];
                numbers[a] = numbers[b];
                numbers[b] = temp;

            }
            while (numbers[a] % 2 == 0 && numbers[b] % 2 != 0 && a < b) {
                //左边是偶数,右边是奇数
                a++;
                b--;
            }
        }
    }

第二步:排序

又是循环嵌套,除了注意外部(比如处理偶数这一边的排序的时候一定要加上&& (i < count)

)条件外,这里格外需要注意的就是初始条件了(比如处理偶数这一边的排序的初始条件的时候i = count - 1):

 

/*直接插入排序*/
    private static void range(int[] arr) {
        int i = 0;
        int count = 0;
        while (arr[i] % 2 == 0) {
            /*计算出偶数的个数*/
            count = count + 1;
            i++;
        }
        /*对所有偶数进行排序*/
        for (i = 1; i < count; i++) {
            for (int j = 0; (j < i) && (i < count); j++) {
                if (arr[i] < arr[j]) {/*后面的更小*/
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }

        /*对剩下的奇数排序*/
        for (i = count - 1; i < arr.length; i++) {
            for (int j = count; j < i; j++) {
                if (arr[i] < arr[j]) {/*后面的更小*/
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
    }

 最后打印输出:

private static void show(int[] numbers) {
    for (int i = 0; i < numbers.length; i++) {
        System.out.println(" " + numbers[i]);
    }
    System.out.println("=================================================");
}

 

 

 

 

转载于:https://www.cnblogs.com/liberhome/p/10444742.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值