Java比较方法为Circular Look磁盘算法对数组进行排序

标签 java arrays algorithm sorting comparator

我正在尝试制作一个自定义比较器,它将按照 C-LOOK 磁盘算法执行的顺序对整数数组进行排序。

我已将磁盘队列实现为 PriorityQueue,客户比较器将分配给磁盘队列列表。

我正在跟踪头部位置,并在比较方法中使用它,但它不太正确。

添加到队列中的前 5 个操作是 [32, 188, 36, 61, 97]。 头部位置从 50 开始。 但是排序后的前5个操作结果是[32, 36, 188, 97, 61]。

我还应该做什么?

private Comparator<Integer> CLOOK() {

    return new Comparator<Integer>() {

        @Override
        public int compare(Integer o1, Integer o2) {

            if (o1 < o2) {

                if (o1 > currentHeadPosition) {
                    return 1;
                }
                return -1;
            }
            else if (o1 > o2) {

                if (o2 > currentHeadPosition) {
                    return -1;
                }
                return 1;
            }
            else {

                return 0;
            }
        }

    };
}
// End CLOOK Comparator

最佳答案

哇,用 eclipse 调试器做了更多测试,我自己找到了解决方案。

private Comparator<Integer> CLOOK() {

    return new Comparator<Integer>() {

        @Override
        public int compare(Integer o1, Integer o2) {

            if (Math.abs(currentHeadPosition - o1) < Math.abs(currentHeadPosition -  o2)) {

                if (o1 < currentHeadPosition) {
                    return 1;
                }
                return -1;
            } 
            else if (Math.abs(currentHeadPosition - o1) > Math.abs(currentHeadPosition - o2)) {

                if (o2 < currentHeadPosition) {
                    return -1;
                }
                return 1;
            } 
            else {

                return 0;
            }
        }

    };
}
// End CLOOK Comparator

关于Java比较方法为Circular Look磁盘算法对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30065417/

相关文章:

java - SimpleDateFormat 似乎给出了错误的结果

java - 如何管理CPU资源

ios - 如何确定导航 route 的下一个兴趣点?

javascript - 使用测距选项生成零件号的最佳方法

java - 如何通过多线程java编程最大化资源(RAM和CPU)使用率?

java - 多态是自下而上的方法调用?

java - a[2] = a[a.length] 删除数组 a 中的 2 个

java - 4个线程或8个线程执行时间相同

c++ - 使用 static const + const 作为数组绑定(bind)

algorithm - 通过删除边从另一个图中迭代创建没有循环的图