【问题标题】:removing duplicates using insertion sort java使用插入排序java删除重复项
【发布时间】:2017-12-11 19:47:32
【问题描述】:

我对下面的代码有一半的问题,它是一种与 Comparable 接口一起使用的插入排序方法。在这种特定情况下,它应该按降序对元素进行排序,这很好。但是,我也试图在同一方法中删除重复项,但它不起作用。我想知道是否真的可以在同一种方法中做到这一点?我已经查看了以下问题Removing Duplicates Inside Insertion Sort 的答案,但我不确定如何在这里应用它。不一定要寻找解决方案,但如果您能指出我可以从那里进一步发展的正确方向。提前致谢。

public void InsertionSortDecrease(){
    for(int i=1;i<size();i++){
        T keyelement = get(i);
        int pos=i;
        while(pos > 0 && 
(((Comparable)keyelement).compareTo((Comparable)get(pos-1)) > 0)){
            set(pos,get(pos-1));
            pos--;
        }
        set(pos,keyelement);
        if(((Comparable)get(pos)).compareTo((Comparable)get(pos+1)) 
== 0){
            remove(pos);
        }
    }
}

【问题讨论】:

  • 您是否为您的keyObject 的类实现了equals()?更好的是,将类型声明为T extends Comparable&lt;T&gt;

标签: java data-structures duplicates comparable insertion-sort


【解决方案1】:

我会亲自使用 TreeSet 来满足您的需求。

您只能add 一个项目,如果它不存在于始终保持排序的集合中。

【讨论】:

  • 谢谢,没用过,但我会尝试一下
【解决方案2】:

您正在尝试在对元素进行排序时删除它们。对于这样的事情,迭代器会更好地避免遇到并发修改错误。

【讨论】:

    【解决方案3】:

    你的错误是你在计数 up,但你应该计数 down,因为最终结果左侧没有更多空间,所以你应该改组右边 找到插入点。

    然后,您需要比较当前位置和前一个(如果存在)位置是否重复,因为由于第一个循环的终止条件,您已经知道它小于下一个位置。但是,如果这是一个骗局,你将不得不将它们全部洗牌。

    更好的是,首先找到插入点,然后如果它是一个骗子,则什么也不做,否则随机插入。如果您以这种方式重构代码,则可以通过执行二分搜索将插入点查找器从 O(n) 改进为 O(log n),因为您知道您正在处理已排序的数据。

    【讨论】:

    • 感谢您,并对延迟回复表示歉意。
    猜你喜欢
    • 1970-01-01
    • 2021-01-30
    • 2013-05-02
    • 2011-02-09
    • 2010-12-16
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多