gpt4 book ai didi

java - 合并排序,合并期间数组重新排列。 java

转载 作者:行者123 更新时间:2023-12-02 01:52:38 26 4
gpt4 key购买 nike

我的数组在合并排序方面遇到了一些问题。在我遇到的每种情况下,合并都可以正常工作,直到它遇到递归方法并将之前合并的数组发送回来。大多数情况下,它会重新排列已经排序的数组,并弄乱第二个合并方法。例如: (3)(2)(1)(4) -> (2,3)(1,4) -> (1,3,2,4) 将是一个可能的结果。我做错了什么可能导致这种情况?

public static int[] mergeSort(int[] numbers) {

if (numbers.length == 1) {
return numbers; }

int[] leftSide = new int[numbers.length/2];
int[] rightSide = new int[numbers.length-leftSide.length];

System.arraycopy(numbers,0,leftSide,0,leftSide.length);
System.arraycopy(numbers,leftSide.length,rightSide,0,rightSide.length);

mergeSort(leftSide);
mergeSort(rightSide);

displayArray(leftSide);
displayArray(rightSide);

numbers = merge(leftSide,rightSide);

System.out.println("=============");

return numbers;
}

public static int[] merge(int[] left, int[] right) {

int[] temp = new int[left.length+right.length];

int l = 0;
int r = 0;
int t = 0;

while (l < left.length && r < right.length) {
if (left[l] > right[r]) {
temp[t] = right[r];
r++;
t++; }
else {
temp[t] = left[l];
l++;
t++; }
}//while

while (l < left.length) {
temp[t] = left[l];
l++;
t++; }
while (r < right.length) {
temp[t] = right[r];
r++;
t++; }

displayArray(temp);

return temp;
}

最佳答案

mergeSort 函数返回一个已排序的数组,我们没有跟踪该数组。由于已排序的数组(左和右)丢失,合并函数再次拾取未排序的左和右数组。修复方法是更新

mergeSort(leftSide);
mergeSort(rightSide);

leftSide = mergeSort(leftSide);
rightSide = mergeSort(rightSide);

这会将它们更新为各自的排序值

关于java - 合并排序,合并期间数组重新排列。 java ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52752376/

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