Java 我的合并排序代码有什么问题?
只是写一些基本的mergeSort代码,我不知道我的逻辑是否有问题。对我来说,它应该很好用 因此,理想情况下,它应该按排序顺序打印元素:1 2 8 11 17 19 25 50 但显示的输出是:82111719192550 我不明白这个代码有什么问题。我的逻辑有问题吗 如果有人能帮我,那就太好了。 对不起,如果这是一个非常愚蠢的问题在这里问Java 我的合并排序代码有什么问题?,java,algorithm,sorting,Java,Algorithm,Sorting,只是写一些基本的mergeSort代码,我不知道我的逻辑是否有问题。对我来说,它应该很好用 因此,理想情况下,它应该按排序顺序打印元素:1 2 8 11 17 19 25 50 但显示的输出是:82111719192550 我不明白这个代码有什么问题。我的逻辑有问题吗 如果有人能帮我,那就太好了。 对不起,如果这是一个非常愚蠢的问题在这里问 public class MergeSort { static final int arr[] = {8, 2, 19, 25, 11, 1, 17
public class MergeSort
{
static final int arr[] = {8, 2, 19, 25, 11, 1, 17, 50};
static int sorted[] = new int[arr.length];
public static void main(String args[])
{
mergeSort(0, arr.length - 1);
display();
}
static void display()
{
for(int i=0; i<sorted.length; i++)
{
System.out.print(sorted[i] + " ");
}
}
static void mergeSort(int first, int last)
{
if(first < last)
{
int mid = (first + last)/2;
mergeSort(first, mid);
mergeSort(mid + 1, last);
merge(first, mid, last);
}
}
static void merge(int first, int mid, int last)
{
int ansIndex = 0;
int index1 = first;
int index2 = mid + 1;
while(index1 <= mid && index2 <= last)
if(arr[index1] < arr[index2])
{
sorted[ansIndex] = arr[index1];
index1++;
ansIndex++;
}
else if(arr[index2] < arr[index1])
{
sorted[ansIndex] = arr[index2];
index2++;
ansIndex++;
}
else
{
sorted[ansIndex] = arr[index1];
index1++; index2++; ansIndex++;
}
if(index1 <= mid)
while(index1 <= mid)
{
sorted[ansIndex] = arr[index1];
ansIndex++; index1++;
}
else if(index2 <= last)
while(index2 <= last)
{
sorted[ansIndex] = arr[index2];
index2++; ansIndex++;
}
}
}
公共类合并排序
{
静态final int arr[]={8,2,19,25,11,1,17,50};
静态整型排序[]=新整型[arr.length];
公共静态void main(字符串参数[])
{
合并排序(0,arr.length-1);
显示();
}
静态无效显示()
{
对于(int i=0;i您的错误是在每一步都使用相同的数组arr
和sorted
,而不复制数据
最简单的修正是将范围0..ansIndex
从sorted
复制到arr
在merge
另外,display
应该显示arr
(sorted
只是临时缓冲区)如果结果是错误的,那么是的,合并排序代码存在逻辑问题。你真的需要问我们吗?“我的逻辑有问题吗?”是的。还有什么你想知道的吗?网上有很多关于合并/排序算法的描述。你看过你的设计了吗?我还建议对所有if
-和while
-语句使用{}
,以增加可读性和可追溯性。