【发布时间】:2017-12-14 10:49:33
【问题描述】:
我正在尝试在按降序排序的数组列表中的正确位置插入一个元素。 找到正确位置的复杂度必须是 O(LOGN)。 这就是为什么我尝试使用二进制搜索来找到正确的位置。 这就是我所做的:
我补充说:
中=(低+高)/2;
在while循环之后。
问题是它按升序插入元素。而不是降序
public void insert(E x) {
if(q.size()==0){
q.add(0, x);
}
else{
int place = binarySearch(x);
q.add(place, x);
}
}
private int binarySearch (E x) {
int size = q.size();
int low = 0;
int high = size - 1;
int middle = 0;
while(high > low) {
middle = (low + high) / 2;
if(q.get(middle).getPriority() == x.getPriority()) {
return middle;
}
if(q.get(middle).getPriority() < x.getPriority()) {
low = middle + 1;
}
if(q.get(middle).getPriority() > x.getPriority()) {
high = middle - 1;
}
}
中=(低+高)/2;
if(q.get(middle).getPriority() < x.getPriority()) {
return middle + 1 ;
}
return middle;
}
【问题讨论】:
-
我的意思是找到正确位置的复杂度必须是O(LOGN)。我编辑帖子。
-
再次检查答案。我编辑了它。
-
你能扩展一下它不能正常工作。
-
@notyou 如果我添加这个:middle = (low + high) / 2;在while循环之后,它以升序插入元素。而不是降序
-
“它不工作”不是问题描述。调试您的代码并尝试定位错误。