三部排序
将负数放到左边 正数放到右边 有0的话,则放中间
public class Test4 {
public static void main(String[] args) {
// 三部排序
// 将负数放到左边 正数放到右边 有0的话,则放中间
Integer[] data = { 1, 2, 3 - 4, -6, 3, 0 };
sort1(data);
for (int i = 0; i < data.length; i++)
System.out.print(data[i] + "\t");
}
private static void sort1(Integer[] data) {
int left = 0;
int right = data.length - 1;
int p = 0;
while (p <= right) { // 当指针p小于等于right的时候,循环判断
if (data[p] < 0) {// 当前元素需要放左边,和下标left的元素交换
data[left] = data[left] ^ data[p];
data[p] = data[left] ^ data[p];
data[left] = data[left] ^ data[p];
p++;
left++; // 因为左边的位置 被占据,故而往后移动一个位置
} else if (data[p] > 0) {// 当前元素需要放右边,和下标right的元素交换
data[right] = data[right] ^ data[p];
data[p] = data[right] ^ data[p];
data[right] = data[right] ^ data[p];
right--; // 因为做了个交换,而不知道换到p位置的元素的大小,故而p位置需要继续判断
// 因此只右移right指针
} else {// 当等于0的时候,p后移即可
p++;
}
}
}
}