说白了,类似于快慢指针法

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

http://www.nowcoder.com/questionTerminal/beb5aa231adc45b2a5dcc5b62c93f593

//修改了牛客评论上的数据搬移,后期在进行优化吧
//游标i,j一个指向奇数一个指向偶数,然后形成数据的搬移,和链表的快慢指针很像,快排的思想?个人感觉没有用到快排,只是用到了最基本的数据搬移思想,空间复杂度进一步降低,属于原地排序算法
public class Solution {
    public void reOrderArray(int [] a) {
        int len = a.length;
        if (len <= 1) return;
        
        int i = 0;  //游标i
        while (i < len-1){
            int j = i + 1;
            if(a[i] % 2 == 0){
                while (a[j] % 2 == 0){
                    if (j == len - 1)   return; //扫描到最后都是偶数返回
                    j++;
                }
                //此时j为奇数发生数据交换
                int temp = a[j];
                for (int k = j; k > i; k--) {
                    a[k] = a[k-1];
                }
                a[i] = temp;
            }
            i++;
        }
    }
}

全部评论

相关推荐

醉蟀:你不干有的是人干
点赞 评论 收藏
分享
04-25 19:29
已编辑
宁波大学 运营
被普调的六边形战士很高大:你我美牛孩
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务