我正在尝试创建一个不使用数组的二进制搜索。它还需要计算它执行的搜索次数,直到找到该数字。我还必须使用randomaccessfile。
RandomAccessFile raf=new RandomAccessFile(new File("Project 10"),"rw");
//writing in random numbers. Different numbers will be used when it is being tested
raf.writeInt(-5);
raf.writeInt(-1);
raf.writeInt(122);
raf.writeInt(124);
raf.writeInt(125);
raf.writeInt(256);
用户输入您要搜索的号码。我需要在不使用扫描仪类的情况下执行此操作。这样做的方法非常有用
我知道这是你用数组进行二进制搜索的方法。我需要帮助搞清楚如何在没有数组的情况下做到这一点
public static int binarySearch(int[] list, int key) {
int low = 0;
int high = list.length - 1;
while (high >= low) {
int mid = (low + high) / 2;
if (key < list[mid])
high = mid - 1;
else if (key == list[mid])
return mid;
else
low = mid + 1;
}
return -low - 1; // Now high<low, key not found
}
答案 0 :(得分:1)
这不是一个特定于java的问题,而是一个算法问题。 虽然没有说明,但你的二进制搜索显然是基于文件以某种方式神奇地进行排序。
那就是说,你知道raf.writeInt(xxx)将把一个标准化的字节长度值写入文件。将文件本身视为每个索引位置所在的数组 a [i * 4] ==所以,创建一些函数来计算'mid''low'和'high'作为所需索引的倍数。
Google进行“外部排序”
答案 1 :(得分:1)
如果将文件视为数组,则不需要数组或列表。假设文件已排序,伪代码将类似于
答案 2 :(得分:0)
Would something like this work?
public static int binarySearch(int raf//for the file?, int key//for input?){
int low=0;
int high=raf.length()-1
while (high>=low){
int mid=(low+high)/2;
if (key<raf.[mid])// Does the [] automatically make it an array
high=mid-1;
else if (key==raf.[mid])
return mid;
else
low=mid+1;
}
return-low-1//now high < low, key not found
}
}