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

一开始想着暴力,后来才发现那个就是插入排序的思想,后来用归并排序给做出来了,下面是我的代码和别人的解法

public class Solution {
    public void reOrderArray(int [] array) {
        helper(array,0,array.length-1);
    }
    public void helper(int[] array,int l,int r)
    {
        if(l>=r)
            return ;
        int mid=l+(r-l)/2;
        helper(array,l,mid);
        helper(array,mid+1,r);
        int[] aux=new int[r-l+1];
        for(int i=l;i<=r;i++)
            aux[i-l]=array[i];
        int index=l;
        int left=r+1;
        int right=r+1;
        for(int i=l;i<=mid;i++)
            if(aux[i-l]%2==1)
                array[index++]=aux[i-l];
            else
            {
                 left=i;
                 break;
            }
               
        for(int i=mid+1;i<=r;i++)
        {
            if(aux[i-l]%2==1)
                array[index++]=aux[i-l];
            else
             {
                 right=i;
                 break;
             }
        }
        for(;left<=mid;left++)
            array[index++]=aux[left-l];
        for(;right<=r;right++)
            array[index++]=aux[right-l];
        return ;
    }
}

//下面是别人的实现分别用归并和插排实现的:

链接:https://www.nowcoder.com/questionTerminal/beb5aa231adc45b2a5dcc5b62c93f593?answerType=1&f=discussion
来源:牛客网

1.归并排序法,使用链表或数组容器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.util.ArrayList;
public class Solution {
     public void reOrderArray( int [] array) {
         if (array.length== 1 ||array.length== 0 ) return ;
         merge(array);
     }
 
     public void merge( int [] arr)
     {
         ArrayList<Integer> left = new ArrayList();
         ArrayList<Integer> right = new ArrayList();
 
         for ( int i: arr)
         {
             if ((i& 1 )== 0 ) //偶数
             {
                 right.add(i);
             } else {
                 left.add(i);
             }
         }
         int r = arr.length- 1 ;
         do {
             arr[r--]=right.remove(right.size()- 1 );
         } while (right.size()!= 0 );
 
         do {
             arr[r--]=left.remove(left.size()- 1 );
         } while (left.size()!= 0 );
     }
 
}

方法二: 插入排序法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.util.ArrayList;
public class Solution {
     public void reOrderArray( int [] array) {
         if (array.length== 1 ||array.length== 0 ) return ;
         handle(array);
 
     }
 
     public void handle( int [] arr)
     {
         for ( int i= 0 ,j;i<arr.length;++i)
         {
             if ((arr[i]& 1 )== 0 ) continue ; //arr[i] 是奇数,并且前一位是偶数
             int curNode = arr[i];
             for ( j=i;j> 0 &&(arr[j- 1 ]& 1 )== 0 ;)
             {
                 arr[j--]=arr[j];
             }
             arr[j]=curNode;
 
 
         }
 
 
     }
 
}

两种方法,看你是想要快,还是内存小

转载于:https://www.cnblogs.com/cold-windy/p/11529143.html

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值