题目
- 假设有一个数组 A ,int[] A = { 1 , 3 , -1 ,0 , 2 , 1 , -4 , 2 , 0 ,1 … N}; 原来是需要查出大于0的数组,但是由于传参错误或者其他原因,导致查出0和负数了,现在要求在不使用新数组和新集合的情况下(即只使用这个A数组,因数组数据比较大,且只能用一次循环) 实现正数放到数组的前面,小于等于0的数放到数组的末尾(答案可在评论里回复)
java实现
int[] A = { -1 , 3 , -1 ,0 , 2 , 1 , -4 , 2 , 0};
int current = 0;
Integer beg = null;
Integer end = null;
for(int i = 0; i< A.length; i++){
if(i==0&&A[i] <= 0){
beg = 0;
end = 0;
}else if(A[i] <= 0){
if(end == null && beg == null){
beg = i;
end = i;
}else{
end +=1;
}
}else if(!(end == null && beg == null) && A[i] > 0){
//交换位置
Integer temp = A[i];
A[i] = A[beg];
A[beg] = temp;
beg++;
end++;
}
}