gpt4 book ai didi

java - 使用二进制搜索的插入排序无法正常工作

转载 作者:行者123 更新时间:2023-11-30 10:56:57 25 4
gpt4 key购买 nike

这是代码

for(out=1; out< dictSize; out++){
String temp = dict[out];
in=out;
int lowerBound = 0;
int upperBound = in-1;
int curIn;

while (lowerBound <= upperBound){
curIn = (lowerBound+upperBound)/2;
if(dict[curIn].compareTo(temp) > 0){
dict[in] = dict[curIn];
dict[curIn]=temp;
upperBound = curIn-1;
} else{
if(dict[curIn].compareTo(temp) < 0){
lowerBound=curIn + 1;
}
}
}
}

//status = "sorted";
for(String v: dict){
System.out.println(v);
}

这是未正确排列的输出:

animal

animal

barter

cases

code

dictionary

file

simon

this

crazy

出了什么问题,我该如何解决?

最佳答案

由于您处理的是数组而不是链表,因此将最后一个元素与中间一个元素交换是不够的。您必须移动数组的整个部分(例如使用 System.arraycopy)。所以这是我的版本:

public static void main(String[] args) {
String[] dict = {"this", "cases", "animal", "barter", "animal",
"file", "code", "dictionary", "simon", "crazy"};
for (int out = 1; out < dict.length; out++) {
String temp = dict[out];
int indexToInsert = binarySearch(dict, 0, out - 1, temp);
if (indexToInsert < out) {
// Next call copies elements [indexToInsert, out-1]
// to elements [indexToInsert+1, out] (shift to the right)
System.arraycopy(dict, indexToInsert, dict,
indexToInsert + 1, out - indexToInsert);
dict[indexToInsert] = temp;
}
}

//status = "sorted";
for(String v: dict){
System.out.println(v);
}
}

public static int binarySearch(String[] dict, int lowerBound,
int upperBound, String value) {
while (lowerBound <= upperBound){
int curIn = (lowerBound + upperBound)/2;
int compRes = dict[curIn].compareTo(value);
// compRes reflects relation between dict[curIn] and value from
// input parameters. compRes is {-1,0,+1} for cases when
// dict[curIn] {<,=,>} value correspondingly. For details see:
// http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#compareTo(java.lang.String) .
if (compRes == 0) {
return curIn;
} else if (compRes > 0){
upperBound = curIn - 1;
} else {
lowerBound = curIn + 1;
}
}
return lowerBound;
}

另一种方法是使用二进制搜索的标准 java 实现:

public static int binarySearch(String[] dict, int lowerBound, 
int upperBound, String value) {
int ret = Arrays.binarySearch(dict, lowerBound, upperBound + 1, value);
return (ret < 0) ? -ret - 1 : ret;
}

关于java - 使用二进制搜索的插入排序无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32832828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com