【发布时间】:2014-11-04 01:13:42
【问题描述】:
所以,如果一个排序整数数组包含大于I 但小于u 的数字,则我在实现一个返回true 的程序时遇到了问题,否则false。
我已经确定快速排序算法将是对数组进行排序的好方法,因为我不知道用户将如何输入它 - 然后,我将排序后的数组提供给二进制搜索并找出是否该数组包含指定范围内的整数。 问题是,我似乎无法对此进行推理,因为它不是我想在这里找到的一个值,而是一个范围。 另外,如果可能的话,我想递归地实现它。
这是我目前所拥有的:
import java.util.Scanner;
class RangeBinarySearch {
public static int[] quickSort(int[] unsortedArray, int left, int right) {
int[] sortArray = unsortedArray;
if (left >= right)
return sortArray;
int pivot = unsortedArray[(left + right) / 2];
int i = left;
int j = right;
while (i <= j) {
while (unsortedArray[i] < pivot)
i++;
while (unsortedArray[j] > pivot)
j--;
if (i <= j) {
int temp = unsortedArray[i];
unsortedArray[i] = unsortedArray[j];
unsortedArray[j] = temp;
i++;
j--;
}
}
if (left < j)
quickSort(unsortedArray, left, j);
if (right > i)
quickSort(unsortedArray, i, right);
return sortArray;
}
public static boolean withinRangeSorted(int[] sortedArray, int I, int u) {// This uses binary search
int start = 0;
int end = sortedArray.length - 1;
int mid = sortedArray[(start + end) / 2];
if (sortedArray[start] > u || sortedArray[end] < I)
return false;
else if (sortedArray[start] > I && sortedArray[end] < u)
return true;
else {
// What to do here? I am stuck!
}
return false;
}
public static void main(String[] args) {
int size;
int inum;
Scanner input = new Scanner(System.in);
System.out.println("Enter the size of the array: ");
size = input.nextInt();
int[] unsortArray = new int[size];
for (int i = 0; i < size; i++) {
int c = i + 1;
System.out.println("Enter element " + c + " to be added to the array: ");
inum = input.nextInt();
unsortArray[i] = inum;
}
int left = 0;
int right = size - 1;
int[] sortedArray = quickSort(unsortArray, left, right);
int I; // greater than
int u; // less than
System.out.println("Enter range starting point: ");
I = input.nextInt();
System.out.println("Enter range end point: ");
u = input.nextInt();
boolean result = withinRangeSorted(sortedArray, I, u);
System.out.println(result);
}
}
问题是,我似乎不知道如何构造withinRangeSorted 方法。
如果我正在搜索大于I 且小于u 的值,我主要对方法应该采用什么样的参数感到困惑。
我觉得我在这里走在正确的轨道上,但我似乎无法正确地制定递归。
任何帮助将不胜感激。
【问题讨论】:
-
我没有得到任务,如果 i 和 u 之间存在一个数字,你应该返回 true 吗?还是每个数字都需要在这个范围内?
-
I和u作为边界对我来说比l和u更有意义。如果数组开始排序,我可能会对l进行二进制搜索,并检查是否有下一个更高的值以及它与u的比较情况。 (但是,“没有什么比 2u”)
标签: java algorithm recursion range binary-search