答案 0 :(得分:0)
这很容易,类似于快速排序线性阶段。
boolean[] arr; //array of males/females, true=male, false=female
int pivotLeft = 0;
int pivotRight = array.length-1;
while (pivotLeft < pivotRight){
if (arr[pivotRight] == true){
pivotRight--;
} else if(arr[pivotLeft] == false){
pivotLeft++;
} else {
boolean temp = arr[pivotLeft];
arr[pivotLeft] = arr[pivotRight];
arr[pivotRight] = temp;
pivotLeft++;
pivotRight--;
}
}
在这种情况下,您指向数组中的两个位置。右侧指向男性部分,左侧指向女性部分。
在我的代码中,如果你发现男性处于正确位置 - 你意味着他属于那里,那么你正在向右移动指针 - 这意味着你可以继续前进。其他方向相同适用于左指针。
如果您在女性部分找到男性,在男性部分找到女性,则切换它们然后继续。