数组奇数左边偶数右边位置不变

数组奇数左边偶数右边位置不变

 

代码如下:自己看吧

public class TestOdd {
    
        public static void  reOrderArray(int [] array) {
            int[] tempArr = new int[array.length];
            int j = 0;
            for(int i=0; i

结果:

 

聊聊快排吧,这个有点类似快排的感觉

  1、外面的大while条件是left

  2、两个指针  一个左边  一个右边

  3、如果两个指针所属的 值都属性是一样 (都是偶数  都是奇数)

  4、来个while 根据实际情况移动下指针  移动到值属性不一样为止

  5、不一样时候 判断如果左边是偶数 右边是奇数的情况下 需要swap

 

但是如果这么玩儿的话肯定是 顺序不满足:看我的代码思路实现:

  

public class Test1 {

    public static void reOrderArray(int[] array) {

        int left = 0;
        int right = array.length - 1;
        while (left < right) {
            while (array[left]%2 !=0 && array[right]%2 !=0){  //都是奇数 移动左边 匹配到可以交换为之
                left++;
            }
            while(array[left]%2 == 0 && array[right]%2 ==0){ //都是偶数  移动右边 匹配到可以交换为之
                 right--;
              }
            if (array[left]%2==0 && array[right]%2 !=0){
                swamp(left,right,array);
            }
           left++;
           right--;
        }

    }

    public static void swamp(int left, int right, int[] arr) {
        int temp = arr[left];
        arr[left] = arr[right];
        arr[right] = temp;
    }

    public static void main(String[] args) {
        int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        reOrderArray(array);
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");
        }
    }
}

实现结果是这样: 保证左右的奇数偶数属性 但是不能保证顺序

 数组奇数左边偶数右边位置不变_第1张图片

所以我采取下面的策略:

  双指针

  第一个去移动,移动到 偶数为止

  第二个去寻找,寻找到奇数 与之交互

    

public class Test2 {
    public static  void sortOdd(int[] arr){
        int left=0;
        int right=1;

       while (right

 

你可能感兴趣的:(算法)