首页 > 试题广场 >

在一个N个整数数组里面,有多个奇数和偶数,设计一个排序算法,

[问答题]
在一个N个整数数组里面,有多个奇数和偶数,设计一个排序算法,令所有的奇数都在左边。
请完成sort的代码实现(
void sort(int[]a)
{
…
}
例如: 当输入a = {8,4,1,6,7,4,9,6,4},
a = {1,7,9,8,4,6,4,6,4}为一种满足条件的排序结果。
 void sort(int[] a){
    int[] result = new int[a.length];
    int index_front = 0;
    int index  =0;
    for(int i = 0 ; i < a.length; i ++){
       if(a[i] % 2 == 0){
            result[index++] = a[i]; 
        }
        else{
            int temp = result[index_front];
            result[index_front++] = a[i];
            index ++;
            for(int i = index_front; i <index; i ++){
                int temp_1 = a[i];
                a[i] = temp;
                temp = temp_1;
            }
        }
    }
    for(int i = 0; i < a.length; i ++){
        a[i] = result[i];
    }
}

发表于 2019-06-01 13:51:59 回复(0)
更多回答
Deque<Integer> dq = new ArrayDeque<>();
        for(int i=0;i<a.length;i++) {
            if(a[i]%2 == 1) {
                dq.addFirst(a[i]);
            }else {
                dq.addLast(a[i]);
            }
        }
        System.out.println("a="+dq.toString());
发表于 2019-06-10 10:38:46 回复(1)
快慢指针同时从一侧出发,找到第一个偶数时,慢指针停下来,快指针寻找下一个奇数,找到就交换,然后快慢指针+1继续。     
int[] sort(int[] a){
        int len = a.length;
        int pre = 0;
        int pos = 0;
        boolean flag = true;
        for(; pos<len; pos++) {
            if(flag && a[pos] % 2 == 0) {
                pre = pos;
                flag = false;
            }
            if((!flag) && a[pos] % 2 == 1) {
                int temp = a[pos];
                a[pos] = a[pre];
                a[pre] = temp;
                pre++;
                }
        }
        return a;     }


发表于 2019-05-30 14:30:43 回复(4)
public int[] change(int[] a){ 
//创建新数组 int[]  b=new int[a.length]; 
//奇数下标 int begin=0;
//偶数下标 int end=a.length-1; 

//遍历数组 for (int i = 0; i <a.length ; i++) { //奇数  if(a[i]%2==1){
                b[begin]=a[i];
                begin++;
            } //偶数  if(a[i]%2==0){
                b[end]=a[i];
                end--;
            }

        } return b;
    }
}


发表于 2019-06-13 01:29:52 回复(0)

//(1)设置begin, end两个指针,begin指向数组的偶数,end指向数组的奇数;

//(2)交换偶数和奇数,同时begin++,end--;

    public void sort(int a[])     {         int begin = 0, end = a.length - 1;         while(begin < end)         {             if(a[begin] % 2 == 0 && a[end] % 2 == 1)             {                 int temp = a[begin];                 a[begin] = a[end];                 a[end] = temp;             }             else if(a[begin] % 2 == 1)             {                 begin++;             }             else if(a[end] % 2 == 0)             {                 end--;             }         }         for(int jj = 0; jj< a.length; jj++)         {             System.out.print(a[jj]);         }     }

发表于 2019-06-06 22:49:36 回复(0)
import java.util.*;

public class test17 {
    public static void main(String[] args) {
        int[] A = { 8, 4, 1, 6, 7, 4, 9, 6, 4 };
        int slow = 0, fast = 0;
        while (fast < A.length) {
            if (A[fast] % 2 == 1) {
                int tmp;
                tmp = A[fast];
                A[fast] = A[slow];
                A[slow] = tmp;
                slow++;

            }
            fast++;
        }
        for (int i = 0; i < A.length; i++) {
            System.out.println(A[i]);

        }
    }

}

发表于 2022-07-23 10:05:07 回复(0)
public class SortArr { public static void main(String[] args) {  int[] arr = {8,4,1,6,7,4,9,6,4}; sort(arr);
        System.out.println(Arrays.toString(arr));
    }  public static void sort(int[] arr) { int count = 0; for (int i = 0; i < arr.length; i++){ if(arr[i]%2!=0){ //奇数  if(i!=count){ swap(arr,i,count);
     }
              
  count++;
          }
        }
    } public static void swap(int[] arr,int i,int j){ int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

发表于 2022-07-15 11:35:36 回复(0)
class weifuwuApplication extends {
    public static synchronized void main(String[] a) {
       int[] b = new   int[]{8,4,1,6,7,4,9,6,4};
        int[] ints = new int[9];
        int j=0;
        int re=b.length-1;
        for (int i = 0; i < b.length; i++) {
            if(b[i]%2!=0){
                ints[j]= b[i];//奇数前面插入
            j++;}
            else{
                ints[re]=b[i];
            re--;//偶数***入
}

        }
        for (int temp:ints){
            System.out.print(temp);

        }
    }}
只会for了,头尾指针,
发表于 2021-06-02 18:24:24 回复(0)
可以用两个空数组分别来装奇数,偶数,然后在一次添加进去就行了
发表于 2020-07-09 00:33:38 回复(0)
快排 当a[i]对应值为偶数时候往后走 交换i与j对应的值
发表于 2019-09-14 19:53:26 回复(0)
我的想法是先遍历算出奇数偶数的个数,然后用定位奇偶分界线,左右遍历,交换。
int jicount = 0;
        int temp;
        for (int i = 0; i < a.length; i++) {
            if (a[i] % 2 != 0) {
                jicount++;
            }
        }
        int n = jicount - 1, m = jicount;
        for (; n >= 0; n--) {
            while (a[m] % 2 == 0 && m < a.length) {
                m++;
            }
            if (a[n] % 2 == 0) {
                temp = a[n];
                a[n] = a[m];
                a[m] = temp;
            }
        }


发表于 2019-09-09 20:46:06 回复(0)
参考答案j++应该为j--。类似快排交换法
void sort(int A[], int n)
{
int x;
int i = 0;
int j = n-1;
while(i != j)
{
while( a[i]%2 == 1)
i++;
while (a[j]%2 == 0)
j--;
if(i < j)
{
x = a[i];
a[i] = a[j];
a[j] = x;
}
}
}


发表于 2019-09-04 17:43:50 回复(1)
void sort(int[] a) {
    int temp;
    for (int i = 0; i < a.length; i++) {
        if(a[i]%2==1) {//如果当前是奇数
            for (int j = 0; j < i; j++) {//找到第一个不是奇数的位置替换,最过分情况在原地不动
                if (a[j]%2==0) {
                    temp = a[i];
                    a[i] = a[j];
                    a[j] = temp;
                }
            }
        }
    }
}

发表于 2019-08-11 00:23:40 回复(4)
YL,头像 YL,
通过if减少更多代码的运行
public static void sort(int[] a){  int begin = 0;  for (int i = 0; i < a.length; i++) {  if (a[i] % 2 == 1 && begin != i){ int temp = a[i];
           a[i] = a[begin];
           a[begin] = temp;
           begin++;
       }
    }
  
}


发表于 2019-07-18 20:07:15 回复(0)
void sort(int[] a){
    Deque<Integer> dq = new ArrayDeque<>();   for(int i=0;i<a.length;i++) {     if(a[i]%2 == 1) {       dq.addFirst(a[i]);     }else {       dq.addLast(a[i]);     }   }   System.out.println("a="+dq.toString());

}

发表于 2019-06-10 09:50:41 回复(0)
void sort(int []a){
    int []d = new int[a.length];
   int i =0, j = a.length - 1;
    for(int k = 0; k < a.length;k++){
        if(a[k] % 2 == 0){
           d[j++] = a[k];         
        }else{
            d[i++] = a[k];
        }
   }
 a = d;
}
发表于 2019-06-04 17:02:35 回复(0)
static void sort(int[] a) {
        for (int i = 0; i < a.length - 1; i++) {
            for (int j = i + 1; j > 0; j--) {
                // if odd and former is even, then exchange
                if (a[j] % 2 == 1 && a[j - 1] % 2 == 0) {
                    swap(a, j - 1, j);
                } else {
                    break;
                }
            }
        }
    }

    // exchange place
    static void swap(int[] a, int i, int j) {
        int temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }

发表于 2019-06-04 14:03:56 回复(0)