InsertionSort降序java

时间:2017-07-23 12:26:31

标签: java sorting insertion-sort

这是按升序执行insertSort的代码。我试图更改代码,以便它可以按降序排列。但每次我改变一些东西都会变得更糟。有人能指出我正确的方向吗?

int pds_search_by_key(int key, struct Contact *c) {

    fseek(repo_fptr, 0L, 0);

    if (pdsInfo.repo_status == 1) {
        while (fread(c, sizeof(*c), 1, repo_fptr) == 1) {
            if (c->contact_id == key) {
                return PDS_SUCCESS;
            }
        }
        return PDS_REC_NOT_FOUND;
    }
    return PDS_REPO_NOTOPEN;
}

2 个答案:

答案 0 :(得分:0)

我发现代码没有任何大问题。我会做的是我会使用一个额外的参数来重载此函数:Comparatordocs here)用于代替自然compareTo

作为灵感来看this(java中的集合)

  

static <T> void sort(List<T> list, Comparator<? super T> c)排序   指定列表根据指定的顺序引发   比较器。

要获得降序,您可以使用以下内容调用您的函数:

insertionSort(A,
                new Comparator<Integer>() {

            @Override
            public int compare(Integer o1, Integer o2) {
                return o2.compareTo(o1) ;
            }}
        );

答案 1 :(得分:0)

您当前的insertionSort()函数代码对于按升序排序是正确的。这是一个很好的基线。

我不知道您为了制作降序版本而尝试了哪些更改。请在下次提供这些信息,因为否则我们无法告诉您它为什么不起作用。

要将函数更改为降序排序,请逐字更改单个字符:

// Sort-ascending version (current)
key.compareTo(list[position-1]) < 0

// Sort-descending version (proposed
key.compareTo(list[position-1]) > 0

我测试了这个变化并确认它有效。希望这有帮助!