对于我参与的项目,我的任务是为两种不同的搜索算法计算搜索时间:二进制搜索和顺序搜索.对于每个算法,我应该记录排序输入和未排序输入的时间.当我比较排序输入与未排序输入的顺序搜索的搜索时间时,我遇到了一些奇怪的事情.根据我先排序的那个,搜索时间将远远大于第二个.因此,如果我在排序的第一个上进行顺序搜索,则会比未排序的顺序搜索花费更长的时间.
这对我来说没有意义,也是我困惑的根源.保证在数据输入中找到所搜索的密钥(通过顺序搜索),因为密钥是从输入中获取的.
这是创建问题的代码.在这种情况下,seqOnUnsorted搜索时间将远远大于seqOnSorted,它不应该是.
public void sequentialSearchExperiment(){
seqOnUnsorted = sequentialSearchSet(keys, unsortedArray);
writeOutExperimentResults(seqOnUnsorted, seqOnUnsortedFilename, "Sequential Sort on Unsorted: ");
seqOnSorted = sequentialSearchSet(keys, sortedArray);
writeOutExperimentResults(seqOnSorted, seqOnSortedFilename, "Sequential Sort on Sorted: ");
}
Run Code Online (Sandbox Code Playgroud)
sequentialSearchSet()方法如下:
public SearchStats[] sequentialSearchSet(int[] keys, int[] toSearch){
SearchStats[] stats = new SearchStats[keys.length];
for (int i = 0; i < keys.length; i++){
stats[i] = sequentialSearch(keys[i], toSearch);
}
return stats;
}
Run Code Online (Sandbox Code Playgroud)
这是sequentialSearch():
public SearchStats sequentialSearch(int key, int[] toSearch){
long startTime = System.nanoTime(); // start timer
// step through array one-by-one until key found …Run Code Online (Sandbox Code Playgroud)