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

    调整数组顺序使奇数位于偶数前面

    一、问题描述

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

    二、算法思路

    这是一个插入排序的变种,实际上比插入排序更加简单。
    插入排序的主要任务是维护一个部分有序的数组,插入使得有序部分不断扩大。而这里的主要任务可以看作是维护一个(不改变顺序的)奇数数组,因为只要不两两交换,那么偶数的先后顺序是不会变动的,所以等排好了奇数部分,偶数部分自然也就大功告成了。

    三、算法实现

    3.1、Java实现版

    public class Solution {
        public void reOrderArray(int [] array) {
            int i=-1;//i表示奇数序列最后一个元素的下标
            for(int k=0;k<array.length;k++){
                if(array[k]%2==1){//如果array[k]是奇数
                    int temp=array[k];
                    while(k>i+1){
                        array[k]=array[k-1];
                        k--;
                    }
                    array[i+1]=temp;
                    i++;
                }
            }
        }
    }
    

    解释:代码中的i表示的是奇数序列最后一个元素的下标。当找到新的奇数时,先将这个奇数保存,把从它往左的到第一个偶数整体往右移动一个单位,并在i+1的地方放上之前保存的奇数,到此,一趟循环已经完成。如果是偶数的话,直接跳过。

    keep going
  • 相关阅读:
    数据规范化(normalization)
    《穷爸爸富爸爸》笔记
    期望,方差,协方差,相关系数,协方差矩阵,相关系数矩阵,以及numpy实现
    numpy array和mat的乘法
    matlab多图排列
    POJ 3463
    POJ 3463
    Poj2449 第k短路
    Poj2449 第k短路
    POJ 3013
  • 原文地址:https://www.cnblogs.com/MarkKobs-blog/p/10405036.html
Copyright © 2011-2022 走看看