zoukankan      html  css  js  c++  java
  • 剑指offer(13):调整数组顺序使奇数位于偶数前面

    题目描述

    输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
    思路:
    其实该题目是一道排序题,由于题目要求相对位置不变,因此我们需要使用稳定的排序算法,插入排序或者冒泡排序
    插入排序,就是每次扫描到奇数时,就把它插入到上一个奇数的后面,因此,需要将这一节的偶数整体向后移动,时间复杂度为O(n^2)
    冒泡排序即每次遇到偶数在前奇数在后的情况,就交换两者的位置,时间复杂度也为O(n^2)
    也可以牺牲空间换取时间,定义一个数组,如果遇到奇数原数组不变,如果遇到偶数,将该数插入到新数组中,然后从原数组移除该元素,最后将新数组拼接在原数组后面
    如果改题目不要求相对位置,那么我们就可以使用快排的思想来做
    C++实现插入排序思想:
    class Solution {
    public:
        void reOrderArray(vector<int> &array) {
            int odd = -1;//奇数指针
            int temp;
            for(int i=0;i<array.size();i++){
                if(array[i] % 2 == 1){
                    temp = array[i];
                    for(int j=i;j> odd+1;j--){
                        array[j] = array[j-1];
                    }
                    array[++odd] = temp;
                }
                
            }
        }
    };

     java实现冒泡排序算法;

    public class Solution {
        public void reOrderArray(int [] array) {
            boolean swap = true;
            int tmp;
            int len = array.length;
            for(int i = 0;i<len;i++){
                if(swap == false)
                    break;
                swap = false;
                for(int j = 0;j<len-i-1;j++){
                    
                    if(array[j]%2==0 && array[j+1]%2==1){
                        tmp = array[j];
                        array[j] = array[j+1];
                        array[j+1] = tmp;
                        swap = true;
                    }
                }
            }
        }
    }

     评论区大神使用c++ STL库的stable_partition函数

    class Solution {
    public:
        bool static isOdd(int n){
            return n%2==1;
        }
        void reOrderArray(vector<int> &array) {
            stable_partition(array.begin(),array.end(),isOdd);
        }
    };

    stable_partition函数介绍:

  • 相关阅读:
    编写EasyCluster V2.0 Portal主界面时的HTML心得(NOWRAP)
    Learning Perl 4ed Reading Notes Chapter4 Subroutines
    Ajax的异步,是鸡肋还是鸡排?
    JavaScript中使用eval函数将一个String当成一句JS代码来执行
    AJAX中消除Tomcat会cache action返回值的问题
    Learning Perl 4ed Reading Notes Chapter2 Scalar Data
    你知道这个语法吗?
    33中JS效果整理
    SQL语法大全[转]
    JS表单判断函数代码大全
  • 原文地址:https://www.cnblogs.com/ttzz/p/13538040.html
Copyright © 2011-2022 走看看