- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
尝试在 Java 中实现归并排序。我在脑海中仔细检查了我的代码,我觉得它应该可以工作,但显然我做错了什么。这是代码
public static void mergeSort(int[] input, int start, int end) {
if (end - start < 2)
return;
int mid = (start + end) / 2;
mergeSort(input, start, mid);
mergeSort(input, mid + 1, end);
merge(input, start, mid, end);
}
public static void merge(int[] input, int start, int mid, int end) {
if (input[mid - 1] <= input[mid])
return;
int i = start;
int j = mid;
int tempIndex = 0;
int[] temp = new int[end - start]; //combined size of both arrays being merged
/*if i is >= mid, then that means the left portion of the array is done being sorted
and vice versa if j >= end. Once this happens, we should be able to
just copy the remaining elements into the temp array
*/
while (i < mid && j < end) {
temp[tempIndex++] = (input[i] <= input[j]) ? input[i++] : input[j++];
}
//Copying left over elements in left portion
while (i < mid)
temp[tempIndex++] = input[i++];
//Copying left over elements in right portion
while (j < end)
temp[tempIndex++] = input[j++];
//Copy the sorted temp array into the original array
//This is where I think I must be messing up
for (int k = 0; k < temp.length; k++) {
input[start + k] = temp[k];
}
}
我想一定是我没有正确地将带有排序元素的临时数组复制回原始数组,但我不确定。我在我的代码上写了注释来解释我的逻辑。
最佳答案
查看以下更改:
计算中值
int mid = start + (end - start) / 2;
正确分配指针 i,j。
int i = start;int j = mid+1;
临时数组的正确大小。
int [] temp = new int[end-start+1];
更正了代码中的 while 循环条件。
class Solution{
public static void mergeSort(int[] input, int start, int end)
{
if (end == start ) return;
int mid = start + (end - start) / 2;
mergeSort(input, start, mid);
mergeSort(input, mid+1, end);
merge(input, start, mid, end);
}
public static void merge(int[] input, int start, int mid, int end) {
// No Need of the under mentioned instruction
// if(input[mid-1] <= input[mid]) return;
int i = start;
int j = mid+1;
int tempIndex = 0;
int [] temp = new int[end-start+1]; //combined size of both arrays being merged
/*if i is >= mid, then that means the left portion of the array is done being sorted and vice versa if j >= end. Once this happens, we should be able to just copy the remaining elements into the temp array */
while(i <= mid && j <= end){
temp[tempIndex++] = (input[i] <= input[j]) ? input[i++] : input[j++];
}
//Copying left over elements in left portion
while(i <= mid)
temp[tempIndex++] = input[i++];
//Copying left over elements in right portion
while(j <= end)
temp[tempIndex++] = input[j++];
//Copy the sorted temp array into the original array
//This is where I think I must be messing up
for(int k = 0; k < temp.length; k++){
input[start+k] = temp[k];
}
}
public static void main(String[] args){
int[] input = {9,4,6,8,5,7,0,2};
mergeSort(input,0,7);
for(int i : input)
System.out.println(i);
}
}
关于java - 调试 : Mergesort,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63895157/
我刚刚实现了这两种算法,当我绘制结果时我很惊讶!递归实现显然比迭代实现更快。之后,我将插入排序与两者相结合,结果是一样的。 在讲座中,我们经常看到递归比阶乘计算中的迭代慢,但在这里似乎并非如此。我很确
很难说出这里问的是什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或言辞激烈,无法以目前的形式合理回答。如需帮助澄清此问题以便可以重新打开,visit the help center . 8年前关闭
尝试在 Java 中实现归并排序。我在脑海中仔细检查了我的代码,我觉得它应该可以工作,但显然我做错了什么。这是代码 public static void mergeSort(int[] inp
我有一个程序 Mergesort 与无序列表一起工作。我得到的问题是段错误(核心转储)。 实际上,我经常收到此错误,但我不知道如何解决。此外,它不会显示任何错误或警告消息来查找它。在这个源代码和其他一
我正在尝试使用多线程实现合并排序的版本。首先,我知道这里有十亿条线索(给予或接受......),而我读了一些但无济于事!我试图证明并行使用线程可以加快进程的速度。然而,我遇到的问题是我的代码没有显示和
package merge; public class Merger { int[] a = {1, 10, 5, 9}; // int[] a = {1, 10, 5, 9, 8, 6, 3,
我正在上算法课,并试图在 C++ 中实现合并排序。我试图存储左右子数组,但意识到我无法这样做,因为我无法在运行时初始化大小。有没有办法解决这个问题,或者我是否错误地进行了排序过程?我在下面列出了我所拥
遇到合并排序问题。对数组进行排序后,我希望它只打印完全排序的数组,而不是每次传递。我的代码如下。我在数组似乎已排序后运行 printArray(intArray) 。也许我把它放在错误的地方?您可以在
练习合并排序时遇到问题。我在线程“main”java.lang.ArrayIndexOutOfBoundsException 中收到异常:1mergeSort 部分工作得很好,但重新组装数组对我来说很
在多次递归调用后,low 变为等于 high,递归中断。之后会发生什么?谁能解释一下。合并过程对我来说很清楚:当调用 mergesort(0,5) 时,它会再次调用自身:mergesort(0,2)
这是基于 Cormen 书中给出的算法。我做错了什么? #include #include void mergesort(int a[],int,int); void merge(int a[],
我正在尝试在合并函数中使用 for 循环为 mergesort 编写 C 代码。不幸的是它不工作。在 main 函数中,我按降序在 10 个 int 上创建了一个 array,然后调用 mergeso
代码目录结构, ./Computing$ ls -LR .: list file.txt mergeSort.c program.exe type.h ./list: arrayImpl.c l
我想制作一个 MergeSort 算法,我想从外部文件(如 txt)获取我的数据,当我导入我的文件时,我得到一些奇怪的结果 [9. 9. 9. 9.] 我的输入数据是 [12, 44, 11, 9]
我一直在尝试实现我的“自己的”MergeSort,它似乎适用于较小的值,但我正在以随机顺序在 1-100,000 的数组上尝试它,并在打印时混合了一些奇怪的数字退出。我已经跟踪了 10 次,但都没有运
我一直在尝试编写一个基本的自上而下的归并排序,但代码执行完毕后数组并未完全排序。我试过调试它,但所有的递归使得很难查明。我也曾尝试将我的代码与其他合并排序示例进行比较,但我没有找到任何差异 p
我在 python 中使用递归编写了一个 MergeSort 程序,但我不断收到有关第 27 行、第 23 行、第 18 行和递归错误的错误: “RecursionError:比较时超出了最大递归深度
我正在使用“算法简介”中描述的算法实现 Mergesort。但是,在每次执行时,我都会得到一个垃圾值作为排序数组的第一个元素。这是它的代码: #include #include #include
以下合并排序来自数据结构和算法分析 (Weiss)。我想知道的是合并步骤中的最后一个 for 循环。我知道我们必须将 tmpArray 复制回 array,但我不明白为什么我们从 rightend 开
我的教授分配了一个问题,我们必须使用堆栈(或队列)来进行非递归 MergeSort。目前代码如下: private static void sort(Comparable[] a, int[] in
我是一名优秀的程序员,十分优秀!