这是按升序执行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;
}
答案 0 :(得分:0)
我发现代码没有任何大问题。我会做的是我会使用一个额外的参数来重载此函数:Comparator
(docs 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
我测试了这个变化并确认它有效。希望这有帮助!