前几天做美团的笔试遇到的一道编程题,这是一类问题比如:负数出现在整数前面、小于某个数的出现在前面等等。利用快速排序思想,定义两个指针,初始化时第一个指针指向数组的第一个元素,,第二个指针指向数组最后一个元素;如果第一个指针指向的是偶数,第二个指针指向的数字是奇数,交换两个数字,且第一个指针始终在第二个指针前面。
代码如下:
public void reOrderArray(int a[]) { if(a == null) return; int begin = 0; int end = a.length - 1; while(begin < end) { while(begin < end && isOdd(a[begin])) begin ++; while(begin < end && !isOdd(a[end])) end -- ; if(begin < end) //交换位置 { int tmp = a[begin]; a[begin] = a[end]; a[end] = tmp; } } } public boolean isOdd(int n) // 排序条件 { return (n&1) == 0; }
完成代码这里