我是java新手,我有任务要做——mergeSort,但我有一个老师根据数组右侧提出的问题,但我不知道该怎么做。这是我的代码:
public class MergeSort {
private int[] array;
private int[] tempArray;
public int[] sort(int[] array) {
this.array = array;
this.tempArray = new int[array.length];
mergeSort(0, array.length - 1);
return array;
}
private void mergeSort(int lowerIndex, int higherIndex) {
if (lowerIndex < higherIndex) {
int middleIndex = lowerIndex + (higherIndex - lowerIndex) / 2;
mergeSort(lowerIndex, middleIndex);
mergeSort(middleIndex + 1, higherIndex);
merge(lowerIndex, middleIndex, higherIndex);
}
}
private void merge(int lowerIndex, int middleIndex, int higherIndex) {
for (int i = lowerIndex; i <= higherIndex; i++) {
tempArray[i] = array[i];
}
int i = lowerIndex;
int j = middleIndex + 1;
int k = lowerIndex;
while (i <= middleIndex && j <= higherIndex) {
if (tempArray[i] <= tempArray[j]) {
array[k] = tempArray[i];
i++;
} else {
array[k] = tempArray[j];
j++;
}
k++;
}
while (i <= middleIndex) {
array[k] = tempArray[i];
k++;
i++;
}
}
}
代码运行得很完美,但是,正如我前面提到的,我的老师问我:“你处理一半的合并-请注意,你还有第二个数组(右边的一个),当左边的一个为空时,可能会有元素”。
你能告诉我我在这里做错了什么吗?谢谢你的帮助。
我没有发现逻辑有任何问题。可能是您的老师要求您将其添加到合并
函数中,
while (j <= higherIndex) {
array[k] = tempArray[j];
k++;
j++;
}
无论有没有这个,你的代码都能完美工作。
问题是关于从16:43到23:34的视频中的合并排序http://youtu.be/M814OagXWTI?t=16m43s 在退出左/右排序合并递归后,我不清楚我们是如何合并回这些子数组的。让我们从最底部开始,当我们的元素被分成两个子数组时,一个左子数组称为B,一个右子数组称为C。在16:43左右,我们跳转到合并函数,对数组B和C进行排序,这两个数组只有8和3。合并排序函数(下面的代码)基本上通
在处理接近排序的数组时,哪种算法的快速排序或合并排序性能更好?为什么?我意识到,在这种情况下,其他算法可能会比这些算法表现得更好。
问题内容: 给定两个排序数组,如下所示: 我希望输出为: 要么: 我知道我可以执行以下操作: 我只是想知道是否有一种更快的方法,因为我要处理的数组具有数百万个元素。 任何想法都欢迎。谢谢 问题答案: 由于您使用numpy,因此我怀疑bisec根本不会对您有所帮助。因此,我建议您做两件事: 千万 不能 使用,使用方法,而不是这种种取代阵列,避免了复制。 必须使用没有到位的。因此,不要手动使用逻辑。I
我的任务是用C#为二维数组创建合并排序算法。数组看起来像这样 我需要从文件中取数组并按x的升序对行进行排序,同时程序要检查是否有相同x值同时不同Y值的坐标对,当数组排序后,程序要将其写入文件中。我已经为一维数组创建了算法,但是不懂如何为二维数组重写算法,这是我的代码,请帮助我
我试图实现一个递归合并排序算法来排序一个简单的整数数组,但我得到奇怪的值为索引在我的数组的后半部分。前半部分似乎排序精细,这是令人困惑的,因为它是递归实现的。随机整数数组在我的main方法中初始化。 } 这会产生以下输出: 未排序数组={15,9,12,19,49,43,57,70,78,87}对于第1轮:第一个=0中间=4最后=9第1轮中的数组={15,9、12,19、49,43、57,70、7
问题是== 将nums1和nums2合并到一个按非递减顺序排序的数组中。 最终排序的数组不应由函数返回,而应存储在数组 nums1 中。为了适应这种情况,nums1 的长度为 m n,其中前 m 个元素表示应合并的元素,最后 n 个元素设置为 0 并应忽略。nums2 的长度为 n。 我的代码中有什么错误??? 您的意见 我的产出 预期产出