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

    题目描述:

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

    思路:

      这道题首先就能想到一个思路,运用快速排序的思想,设置前后两个指针,分别从数组的前后两端开始遍历,前指针遇到偶数,后指针遇到奇数交换之。

    public class Solution {
        public void reOrderArray(int [] array) {
             
            int left = 0, right = array.length-1;
             
            while(left < right) {
                while(left < right && !isEven(array[left]))
                    left ++;
                while(left < right && isEven(array[right]))
                    right ++;
             
                swap(array, left, right);
            }
             
        }
         
        public boolean isEven(int ele) {
            return (ele & 1) == 0;
        }
         
        public void swap(int[] arr, int i, int j) {
            int t = arr[i];
            arr[i] = arr[j];
            arr[j] = t;
        }
    }

    但是上面这种解法其实是有问题的,因为快速排序是不稳定的排序,而题目要求稳定性。那么就要考虑冒泡排序和插入排序了。冒泡排序无非是交换前偶后奇的情况,插入排序是找到一个奇数插入到第一个偶数前面。。。

    下面是基于插入排序思想的一种解法:

    public class Solution {
        public void reOrderArray(int [] array) {
            
            if(array == null || array.length <= 1)
                return ;
            for(int i=0;i<array.length;i++){
                if(!isEven(array[i])){
                    int temp=array[i];
                    int j=i-1;
                    while(j>=0&&isEven(array[j])){
                        array[j+1]=array[j];
                        j--;
                    }
                    array[j+1]=temp;
                }            
            }
            
        }
        
        public boolean isEven(int ele) {
            return (ele & 1) == 0;
        }
        
    }
  • 相关阅读:
    进度条
    html5 表单新增事件
    html5 表单的新增type属性
    html5 表单的新增元素
    html5 语义化标签
    jq 手风琴案例
    codeforces 702D D. Road to Post Office(数学)
    codeforces 702C C. Cellular Network(水题)
    codeforces 702B B. Powers of Two(水题)
    codeforces 702A A. Maximum Increase(水题)
  • 原文地址:https://www.cnblogs.com/wxisme/p/5295134.html
Copyright © 2011-2022 走看看