问题:给出一个含有正整数和负整数的数组,重新排列成一个正负数交错的数组。
样例:给出数组
思路:先扫描一遍,正数放左,负数放右,然后交换相应位置,时间复杂度O(n) 。
[-1, -2, -3, 4, 5, 6]
,重新排序之后,变成
[-1, 5, -2, 4, -3, 6]
或者其他任何满足要求的答案
public void rerange(int[] A) {
int len=A.length;
if (len == 0 || len == 1)
return;
int p1 = 0;
int p2 = len-1;
while(p1<p2){
if(A[p1]<0){
swap(A,p1,p2);
p2--;
}else{
p1++;
}
}
if (len % 2 == 0) {
p1=1;
p2=len-2;
}else if( A[len/2]>0){
p1=1;
p2=len-1;
}else{
p1=0;
p2=len-2;
}
while (p1 < p2) {
swap(A,p1,p2);
p1=p1+2;
p2=p2-2;
}
}
public void swap(int[] A,int i,int j){
int swap=A[i];
A[i]=A[j];
A[j]=swap;
}