找到一个线性运行时策略,在男性的任何记录之前为女性放置所有记录?

时间:2016-03-18 12:04:50

标签: algorithm sorting

  1. 与排序相关的一些问题可以在小于排序的Θ(n log n)下限的情况下解决。请考虑以下情形。包含人事记录的一组N个记录具有指示性别,男性或女性的字段。找到一个线性运行时策略,在女性的任何记录之前为女性放置所有记录。也就是说,女性将位于列表的前面,而男性则位于最后。

1 个答案:

答案 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--;
    }
}

在这种情况下,您指向数组中的两个位置。右侧指向男性部分,左侧指向女性部分。

在我的代码中,如果你发现男性处于正确位置 - 你意味着他属于那里,那么你正在向右移动指针 - 这意味着你可以继续前进。其他方向相同适用于左指针。

如果您在女性部分找到男性,在男性部分找到女性,则切换它们然后继续。