gpt4 book ai didi

java - 合并排序算法不对后半部分进行排序

转载 作者:行者123 更新时间:2023-11-30 04:09:38 26 4
gpt4 key购买 nike

数组的后半部分没有为我排序,我似乎不明白为什么。

这是我的代码

public static void sort(int[] a)
{
if(a.length >= 2)
{
int halfLength = a.length / 2;
int[] firstHalf = new int[halfLength];
int[] lastHalf = new int[a.length - halfLength];

divide(a, firstHalf, lastHalf);
sort(firstHalf);
sort(lastHalf);
merge(a, firstHalf, lastHalf);
}
}

private static void divide(int[] a, int[] firstHalf, int[] lastHalf)
{
for(int i = 0; i < firstHalf.length; i++)
{
firstHalf[i] = a[i];
}
for(int i = 0; i < lastHalf.length; i++)
{
lastHalf[i] = a[firstHalf.length + i];
}
}

private static void merge(int[] a, int[] firstHalf, int[] lastHalf)
{
int firstHalfIndex = 0, lastHalfIndex = 0, aIndex = 0;
while((firstHalfIndex < firstHalf.length) && (lastHalfIndex < lastHalf.length))
{
if(firstHalf[firstHalfIndex] < lastHalf[lastHalfIndex])
{
a[aIndex] = firstHalf[firstHalfIndex];
firstHalfIndex++;
}
else
{
a[aIndex] = lastHalf[firstHalfIndex];
lastHalfIndex++;
}
aIndex++;

while(firstHalfIndex < firstHalf.length)
{
a[aIndex] = firstHalf[firstHalfIndex];
aIndex++;
firstHalfIndex++;
}
while(lastHalfIndex < lastHalf.length)
{
a[aIndex] = lastHalf[lastHalfIndex];
aIndex++;
lastHalfIndex++;
}
}
}

我从教科书上得到了这个,我知道我可以在网上找到更多例子,但我希望我能先让它工作。

输出:

Array values before sorting:
7 5 11 2 16 4 18 14 12 30
Array values after sorting:
2 5 7 11 16 4 18 12 14 30

预期输出:

Array values before sorting:
7 5 11 2 16 4 18 14 12 30
Array values after sorting:
2 4 5 7 11 12 14 16 18 30

感谢您的帮助!

最佳答案

两个错误:

  • lastHalf[firstHalfIndex] 中复制粘贴错误,应为 lastHalf[lastHalfIndex]
  • 第一个 while 循环不应跨越其他两个

更正:

private static void merge (int[] a, int[] firstHalf, int[] lastHalf) {

int firstHalfIndex = 0, lastHalfIndex = 0, aIndex = 0;
while ((firstHalfIndex < firstHalf.length) && (lastHalfIndex < lastHalf.length)) {
if (firstHalf[firstHalfIndex] < lastHalf[lastHalfIndex]) {
a[aIndex] = firstHalf[firstHalfIndex];
firstHalfIndex++;
} else {
a[aIndex] = lastHalf[lastHalfIndex];
lastHalfIndex++;
}
aIndex++;
}
while (firstHalfIndex < firstHalf.length) {
a[aIndex] = firstHalf[firstHalfIndex];
aIndex++;
firstHalfIndex++;
}
while (lastHalfIndex < lastHalf.length) {
a[aIndex] = lastHalf[lastHalfIndex];
aIndex++;
lastHalfIndex++;
}
}

关于java - 合并排序算法不对后半部分进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19959593/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com