【发布时间】:2016-09-25 21:30:15
【问题描述】:
我是一名 Java 初学者,试图创建一个实现二进制插入排序并排序数据大小为 50、500、5000、50000 和 500000 的随机数组的类。
当我将它实现为插入排序时,该程序运行良好。
public double InsertionSort(long array[]) {
setType("Insertion Sort");
long temp;
int y;
double numOfSwap = 0, numOfComparisons = 0;
double startTime = System.nanoTime();
for (int x = 1; x < array.length; x++) {
temp = array[x];
numOfSwap++;
y = x;
numOfComparisons++;
while ((y > 0)) {
numOfComparisons++;
if ((array[y - 1]) > temp) {
array[y] = array[y - 1];
numOfSwap++;
y = y - 1;
} else
break;
}
array[y] = temp;
numOfSwap++;
}
double endTime = System.nanoTime();
setSwap(numOfSwap / 3);
setComparisons(numOfComparisons);
setTime(endTime - startTime);
return getTime();
}
但是当我尝试插入二进制搜索时,它不再起作用了。
public double binaryInsertionSort(long array[], int value, int left, int right) {
setType("Binary Insertion Sort");
long temp;
int y;
int left, right;
double numOfSwap = 0, numOfComparisons = 0;
double startTime = System.nanoTime();
for (int x = 1; x < array.length; x++) {
temp = array[x];
numOfSwqp++;
int left = y;
int right = x;
if (left>right)
return -1;
int middle = (left + right)/2;
if (array[middle] == value)
return middle;
numOfComparisons++;
else if (array[middle]>value)
return binaryInsertionSort(array, value,left, middle -1);
numOfComparisons++;
else
return binaryInsertionSort (array, value, middle +1, right);
numOfComparisons++;
}
double endTime = System.nanoTime();
setSwap(numOfSwap / 3);
setComparisons(numOfComparisons);
setTime(endTime - startTime);
return getTime();
}
有人可以帮我修复我的代码吗?
【问题讨论】:
-
您听说过 MCVE 吗?它代表最小、完整和可验证的示例。我认为你应该在你的“最小”上工作。 stackoverflow.com/help/mcve
-
@JaroslawPawlak:至少他提供了完整的代码。
-
@GauravMahindra 这可能是件好事,但是说“我有这 400 行代码,我将其更改为其他 400 行代码并且它停止工作”无论如何都没有帮助。
-
如果代码至少可以编译也会很有帮助。它有许多语法错误。所提供的代码不仅远非minimal,而且也不是verifiable。
-
@JaroslawPawlak 先生,我正式道歉,我无意制作,也不知道 MCVE。我认为提供完整的代码对那些正在学习并在未来有类似问题的人有所帮助——有助于扩大这个学习社区。谢谢你让我知道我的错误。
标签: java sorting search binary insertion