说白了,类似于快慢指针法
调整数组顺序使奇数位于偶数前面
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++;
}
}
}
查看1道真题和解析