zoukankan      html  css  js  c++  java
  • 面试题:调整数组顺序

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

    方法1:两次遍历填充

    public class Solution {
        public void reOrderArray(int [] array) {
            int length=array.length;
            int[] result = new int[length];
            int index = 0;
            for(int i=0;i<array.length;i++){
                if(array[i]%2 == 1){
                    result[index++]=array[i];
                }
            }
            for(int i=0;i<array.length;i++){
                if(array[i]%2 == 0){
                    result[index++]=array[i];
                }
            }
        }
    }

    方法2:借鉴插入排序

    public class Solution {
        public void reOrderArray(int [] array) {
            int index = 0;
            for(int i=0;i<array.length;i++){
                if(array[i]%2 == 1){
                    for(int j=i;j>index;j--){
                        int temp=array[j];
                        array[j]=array[j-1];
                        array[j-1]=temp;
                    }
                    index++;
                }
            }
        }
    }

    方法3:借鉴快速排序

    public class Solution {
        public static void reOrderArray(int [] array) {
            int start = 0;
            int end = array.length - 1;
            while(start<end){
                if(array[start]%2==1){
                    start++;
                }
                if(array[end]%2==0){
                    end--;
                }
                for(int i=start;i<end;i++){
                    if(array[i]%2==0&&array[i+1]%2==1){
                        int temp = array[i];
                        array[i] = array[i+1];
                        array[i+1] = temp;
                    }
                }
            }
        }
    }

    方法4:借鉴冒泡排序

    public class Solution {
        public static void reOrderArray(int [] array) {
            if(array.length == 0){
                return;
            }
            for(int i=0;i<array.length-1;i++){
                for(int j=0;j<array.length-1-i;j++){
                    if(array[j]%2==0&&array[j+1]%2==1){
                        int temp = array[j];
                        array[j] = array[j+1];
                        array[j+1] = temp;
                    }
                }
            }
        }
    }

    类似题目:数组正负值排序,把负值放在左边正值放在右边(相对无序)

    方法1:两次遍历填充

    方法2:借鉴插入排序

    public class Solution {
        public static void reOrderArray(int [] array) {
            int index = 0;
            for(int i=0;i<array.length;i++){
                if(array[i] < 0){
                    for(int j=i;j>index;j--){
                        int temp = array[j];
                        array[j] = array[j-1];
                        array[j-1] = temp;
                    }
                    index++;
                }
            }
        }
    }

    方法3:借鉴快速排序

    public class Solution {
        public static void reOrderArray(int [] array) {
            int start = 0;
            int end = array.length - 1;
            while(start != end){
                while(start<end && array[end]<0){
                    start++;
                }
                while(start<end && array[end]>=0){
                    end--;
                }
                if(start<end){
                    int temp = array[start];
                    array[start] = array[end];
                    array[end] = temp;
                }
            }
        }
    }
  • 相关阅读:
    poj 1984 Navigation Nightmare(带权并查集+小小的技巧)
    zoj 3261 Connections in Galaxy War(并查集逆向加边)
    poj 1733 Parity game(带权并查集)
    poj 1456 Supermarket(贪心+优先队列)
    hdu 3038 How Many Answers Are Wrong(并查集的思想利用)
    poj 1182 食物链(种类并查集 ‘初心者’)
    hdu 1182 A Bug's Life(简单种类并查集)
    hdu 4725 The Shortest Path in Nya Graph(建图+优先队列dijstra)
    CodeForces 779D. String Game(二分答案)
    poj 3169 Layout(差分约束+spfa)
  • 原文地址:https://www.cnblogs.com/Aaron12/p/9504683.html
Copyright © 2011-2022 走看看