java.util.Comparator を使用してSSTFアルゴリズムに取り組んでいます
これは私がこれまでに持っているものです:
private int nextHeadPosition;
public SSTF(int currentHeadPosition) {
nextHeadPosition = currentHeadPosition;
}
@Override
public int compare(DiskRequest r1, DiskRequest r2) {
if (nextHeadPosition - r1.getTrackNumber() < nextHeadPosition - r2.getTrackNumber()) {
nextHeadPosition = r1.getTrackNumber();
return -1;
} else if (nextHeadPosition - r1.getTrackNumber() > nextHeadPosition - r2.getTrackNumber()) {
nextHeadPosition = r2.getTrackNumber();
return 1;
} else {
return 0;
}
}
初期の頭の位置が 50 の場合、次の順序が生成されます。
[100, 99, 50, 45, 44, 1]
私が生成しようとしている出力:
[50, 45, 44, 1, 99, 100]
これはコンパレータでは不可能かもしれません
編集
SSTF
トラック番号を持つリクエストのキューの場合、サービスされる最初のリクエストは、ヘッドの現在の位置に最も近いトラックになります。後続の各リクエストは、最後のリクエストの位置からの距離が最も短い順に並べられます。
したがって、トラックが[100, 99, 50, 45, 44, 1]
あり、現在のヘッド位置が 50 のキューの場合、最初のリクエストは 50 になります。次は 50 に最も近いトラック、この場合は 45 になります。泡立ててすすぎを繰り返します。