剑指offer 13.调整数组顺序使奇数位于偶数前面

时间:2020-03-26
本文章向大家介绍剑指offer 13.调整数组顺序使奇数位于偶数前面,主要包括剑指offer 13.调整数组顺序使奇数位于偶数前面使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

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

题目描述

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

思路一:

定义一个等长的数组,遍历两次数组,第一次存奇数,第二次存偶数,最后把临时数组的内存拷贝到数组中
 1 public class Solution {
 2     public void reOrderArray(int [] array) {
 3         // 定义一个等长的数组,
 4         int[] temp = new int[array.length];
 5         // 遍历两次数组,第一次存奇数,第二次存偶数
 6         // 从前往后找出奇数,存入0 下标开始存, 
 7         int index = 0;    // 临时数组的当前下标
 8         for(int i = 0; i < array.length; i++){
 9             if((array[i] & 1) != 0){
10                 temp[index++] = array[i];
11             }
12         }
13         
14         for(int i = 0; i < array.length; i++){
15             if((array[i] & 1) == 0){
16                 temp[index++] = array[i];
17             }
18         }
19         // 把临时数组拷贝会原来的数组
20         for(int i = 0; i < array.length; i++){
21             array[i] = temp[i];
22         }
23        
24     }
25 }

思路二:

遍历数组,把上一个奇数到当前奇数之间的偶数后移一位,把当前奇数填到上一个奇数后面,更新当前奇数的位置

 1 public class Solution {
 2     public void reOrderArray(int [] array) {
 3        // 遍历数组
 4        int m = -1;        // 当前奇数的位置
 5        for(int i = 0; i < array.length; i++){
 6            
 7            // 如果是奇数, 记录下这个值,将 (i + 1) - j 的元素都后移一位
 8            if((array[i] & 1) != 0){
 9                int j = i;
10                int temp = array[j];
11                while(j > m + 1){
12                    array[j] = array[j - 1];
13                    j--;        
14                }
15                m = j;                // 更新当前奇数的位置
16                array[j] = temp;   
17            }        
18        }
19     }
20 }

原文地址:https://www.cnblogs.com/hi3254014978/p/12577162.html