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

来源:互联网 发布:c语言中二维数组在内存 编辑:程序博客网 时间:2024/05/22 04:00

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

思路:循环遍历数组,找到偶数奇数的序列则对调。当循环一遍无这种序列时,则不需要再循环。

     备注:a&1==0  则a为偶数; a&1==1,a为奇数  

如果不要求相对位置不变,可以两个指针,一个p从前向后找偶数,一个q从后向前找奇数,找到后对调。

核心伪代码:


while(p<q){while(p<q && p.value&1==1){ p++;}while(p<q && p.value&1==0){ q--;}if(p<q){交换p,q所指向的值;}}


设计测试用例:

int arr[]={1,2,3,4,5,6,7,8,10,11,13};//int arr[]={1,2,3,4,5,6};//int arr[]={1,2,3,5,7};//int arr[]={4,2,8,0,18};//int arr[]={1,5,3,9,7};



package com.mytest.mymain;public class Reorderarr {public static void main(String[] args) {int arr[]={1,2,3,4,5,6,7,8,10,11,13};//int arr[]={1,2,3,4,5,6};//int arr[]={1,2,3,5,7};//int arr[]={4,2,8,0,18};//int arr[]={1,5,3,9,7};reOrderArray(arr);for (int i : arr) {System.out.print(i+"  ");}}    public static void reOrderArray(int [] array) {        boolean flag=true;                 while(flag){        int count=0;        for(int i=0;i<array.length-1;i++)        {            if((array[i]&1)==0 && (array[i+1]&1)==1)//偶数,奇数            {             int temp=array[i];            array[i]=array[i+1];            array[i+1]=temp;            flag=true;  //还需要检查            count++;            }         }        if(count==0)            flag=false;    }    }}


0 0