【发布时间】:2017-02-14 09:27:49
【问题描述】:
我应该创建两种方法:第一种方法,bSearch,是一种二分搜索算法。第二种方法 insertInOrder 应该获取我们从 bSearch 方法获得的索引并在数组中找到该索引,通过移动该数组的所有其他元素在该索引处打开一个点,并将 key/int 插入到那个索引。
整数将从包含 25 个整数的文本文件中接收。我不会制作任何副本或额外的数组来执行此操作,我应该对 insertInOrder 方法中的索引进行编码然后解码。在这些方法中,key 将是从 ints 文件中读取的当前 int,count 将计算已接收到的 int 数量。我基本上是在构建自己的排序方法,不能调用任何外部方法,而且数组也不能随时乱序。
我已经填写了这些方法,但我的理解有些不稳定。我认为我的问题是在 bSearch 方法中,因为我不能让它返回除 0 之外的任何内容。我不能让它返回 mid 的新值,这是 key/int 应该的索引被插入。比你的帮助。代码如下:
static void insertInOrder( int[] arr, int count, int key )
{
int index=bSearch( arr, count, key );
int encodedIndex = -(index+1);
int decodedIndex = -(index+1);
for (int i = index; i > 0; i--)
{
arr[i] = arr[i-1];
}
arr[index]=key;
}
static int bSearch(int[] a, int count, int key)
{
int lo = 0;
int hi = a.length-1;
int index = 0;
boolean found = false;
while (!found && lo <= hi)
{
int mid = lo + ((hi - lo) / 2);
if (a[mid] == key)
{
found = true;
index = mid;
}
else if (a[mid] > key)
{
hi = mid -1;
}
else
{
lo = mid +1;
}
}
return index;
}
【问题讨论】:
标签: java arrays if-statement while-loop binary-search