java - 我在Mergesort算法中哪里出错了

标签 java algorithm

我正在学习一些算法,目前我正在尝试将 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/

相关文章:

java - JDBC ResultSet getDate 失去精度

java - 我想添加通用类型编号

java - Google Drive API 给予上传文件的权限不足

algorithm - 规范化整数

algorithm - 有没有办法在比 O(n^3) 时间更好的时间内解决 4Sum 问题?

algorithm - 转换一棵树需要多少 Right Rotation?

c# - 如何根据 DateTime 值的接近度将两个列表中的所有对象匹配成两个对

java - Android 位置字符串问题

java - 我是否需要显式释放使用 CDI 创建的上下文 JDialog?

algorithm - 提高序数排名