zoukankan      html  css  js  c++  java
  • 调整数组顺序使奇数位于偶数前面

    题目描述:

      输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变

     此题应该注意的是要求奇数与奇数,偶数与偶数之间的相对位置不变,则不能使用类似快排的思想,若不要求相对位置,只要求奇数在偶数前,则可以使用,代码如下:

     public void reOrderArray(int [] array) {
            if(array.length == 0){
                return;
            }
            int high = array.length - 1;
            int low = 0;
            while(low < high){
                //从前向后找,找到第一个偶数
                while(low < high && array[low] % 2 == 1){
                    low ++;
                }
                //从后向前找,找到第一个奇数
                while(low < high && array[high] % 2 == 0){
                    high --;
                }
                //交换
                int temp = array[low];
                array[low] = array[high];
                array[high] = temp;
            }
    }    

    算法思想:

      (1)类似插入排序,当前数是奇数,就往前找,遇到偶数就往它前面插

    public class Solution {
        public void reOrderArray(int [] array) {
            for(int i = 1; i < array.length;i++){
                //当当前数为奇数时
                if(array[i] % 2 == 1){
                    int t = i;
                    //寻找该奇数前面的偶数,并与其交换,同时更新当前奇数的下标
                    for(int j = t; j > 0;j--){
                        if(array[j-1] % 2 == 0){
                            int temp = array[t];
                            array[t] = array[j-1];
                            array[j-1] = temp;    
                            t = j-1;
                        }
                    }
                }
            }
        }
    }    

      (2)借助栈

     public void reOrderArray(int [] array) {
           Stack<Integer> stack = new Stack();
            for(int i = 0; i < array.length; i++)
            {
                if(array[i] % 2 == 1)
                    stack.push(array[i]);
            }
            for(int i = 0; i < array.length; i++)
            {
                if(array[i] % 2 == 0)
                    stack.push(array[i]);
            }
            for(int i = array.length-1; i > 0;i--){
                array[i] = stack.pop();
            }
        }

    扩展:在编程设计的时候,可以考虑将判断当前数是奇数还是偶数的方法提取出来,增强方法的通用性。

  • 相关阅读:
    (Go)11.九九乘法表示例
    (Go)10.流程控制示例
    (Go)09.指针赋值修改示例
    (Go)08.time示例
    (Go)07.strings与strconv的示例
    (Go)07.Go语言中strings和strconv包示例代码详解02
    (Go)06. Printf格式化输出、Scanf格式化输入详解
    kafka参数在线修改
    vs code golang代码自动补全
    JVM 方法区
  • 原文地址:https://www.cnblogs.com/suixue/p/5818137.html
Copyright © 2011-2022 走看看