我正在学习一些算法,目前我正在尝试将 Mergesort 实现到 Java 中。这是我的代码:
public class Mergesort {
/**
* @param args
*/
public static void main(String[] args) {
int []a = {12,34,6543,3,6,45,23,677,56,67,3,4,54,5};
sort(a);
for(int i:a)
{
System.out.println(i);
}
}
private static void merge(int[]a,int[]b,int[]c)
{
int i = 0, j = 0, k = 0;
while((i < b.length) && (j < c.length))
{
if(b[i] < c[j])
{
a[k++] = b[i++];
}
else
{
a[k++] = c[j++];
}
while( i < b.length)
{
a[k++] = b[i++];
}
while( j < c.length)
{
a[k++] = c[j++];
}
}
}
public static void sort (int[]a)
{
if(a.length > 1)
{
int m = a.length / 2;
int[]b = new int[m];
int[]c = new int[a.length-m];
for(int i = 0; i < m; i++)
{
b[i] = a[i];
}
for(int i = m; i <a.length; i++ )
{
c[i-m] = a[i];
}
sort(b);
sort(c);
merge(a,b,c);
}
}
}
这是输出:
6543
6
23
45
56
677
67
4
5
54
我是从教程里抄来的,不知道错在哪里。我的第二个问题是:
这是什么意思:a[k++] == b[i++];
我知道我们正在将 a[k](k = a 中的位置)的值更改为 b[i],但为什么是++?
我认为这意味着您将值增加 1? 感谢您的阅读。
最佳答案
这是什么意思:
a[k++] == b[i++];
++ 是增量运算符。请参阅 Assignment, Arithmetic, and Unary Operators 下的一元运算符
这相当于
a = a + 1
所以
a[k++] == b[i++];
与
相同a[k] == b[i];
k = k + 1;
i = i + 1;
Wny is my code not working 是题外话。请调试并询问任何具体问题
关于java - 我在Mergesort算法中哪里出错了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24432292/