Java 关于合并算法的问题
嗨,我有个问题,我知道这个问题在某种程度上是毫无意义的,但让我们看看我有代码将两个排序数组合并到一个排序数组中,这里是java代码Java 关于合并算法的问题,java,algorithm,Java,Algorithm,嗨,我有个问题,我知道这个问题在某种程度上是毫无意义的,但让我们看看我有代码将两个排序数组合并到一个排序数组中,这里是java代码 public class Merge { public static void main(String[]args){ int a[]=new int[]{7,14,23,30,35,40}; int b[]=new int[]{5,8,9,11,50,67,81}; int c[]=new int[a.leng
public class Merge {
public static void main(String[]args){
int a[]=new int[]{7,14,23,30,35,40};
int b[]=new int[]{5,8,9,11,50,67,81};
int c[]=new int[a.length+b.length];
int al=0;
int bl=0;
int cl=0;
while (al<a.length && bl<b.length)
if (a[al]<b[bl])
c[cl++]=a[al++];
else
c[cl++]=b[bl++];
while (al<a.length)
c[cl++]=a[al++];
while (bl<b.length)
c[cl++]=b[bl++];
for (int j=0;j<c.length;j++){
System.out.println(c[j]);
}
}
}
公共类合并{
公共静态void main(字符串[]args){
int a[]=新int[]{7,14,23,30,35,40};
int b[]=新int[]{5,8,9,11,50,67,81};
int c[]=新int[a.length+b.length];
int al=0;
int-bl=0;
int cl=0;
而(al如果您在使用合并排序算法时遇到问题,请查看Wiki文章。
此外,在发布代码时,最好给变量一个更具描述性的名称,并在语句中添加大括号({}
),而和如果语句如果合并排序算法有问题,请查看Wiki文章。
此外,在发布代码时,最好给变量一个更具描述性的名称,并在中添加大括号({}
),而和如果语句则取决于括号的位置,当前代码相当于:
while (al<a.length && bl<b.length) {
if (a[al]<b[bl]) {
c[cl++]=a[al++];
} else {
c[cl++]=b[bl++];
}
}
while(al这取决于括号的位置,您当前的代码相当于:
while (al<a.length && bl<b.length) {
if (a[al]<b[bl]) {
c[cl++]=a[al++];
} else {
c[cl++]=b[bl++];
}
}
while(al如果我的猜测是正确的,那么你的问题是……为什么下面的代码不起作用
while (al<a.length && bl<b.length)
{ //<-- bracket here
if (a[al]<b[bl])
c[cl++]=a[al++];
else
c[cl++]=b[bl++];
while (al<a.length)
c[cl++]=a[al++];
while (bl<b.length)
c[cl++]=b[bl++];
} //<--- Bracket here
while(al如果我的猜测是正确的,那么你的问题是……为什么下面的代码不起作用
while (al<a.length && bl<b.length)
{ //<-- bracket here
if (a[al]<b[bl])
c[cl++]=a[al++];
else
c[cl++]=b[bl++];
while (al<a.length)
c[cl++]=a[al++];
while (bl<b.length)
c[cl++]=b[bl++];
} //<--- Bracket here
while(al一个好建议:始终用大括号围绕所有逻辑代码块:
if (expression) {
//some code
}
if (expression) {
//one line of code
} else {
//another line
}
while (conditionIsTrue) {
//just 1 line here but surrounded with curly braces
}
它将帮助您避免在所有C风格语言中出现许多不明显的错误
如果您理解块中只有一行,并且为了使代码更具可读性而有意识地省略大括号,那么这些错误怎么会出现?非常简单!想象一下代码:
if (a > b)
result = a;
第一眼看上去更优雅
if (a > b) {
result = a;
}
甚至
if (a > b)
{
result = a;
}
但是现在让我们假设您想向代码中添加一些调试信息:
if (a > b)
System.out.println ("a > b, we're inside if-block");
result = a; //This line is ALWAYS executed
正如您所看到的,犯错误非常容易。因此,只要不要忽略大括号,事情就会变得容易得多。一条好建议:始终用大括号围绕所有逻辑代码块:
if (expression) {
//some code
}
if (expression) {
//one line of code
} else {
//another line
}
while (conditionIsTrue) {
//just 1 line here but surrounded with curly braces
}
它将帮助您避免在所有C风格语言中出现许多不明显的错误
如果您理解块中只有一行,并且为了使代码更具可读性而有意识地省略大括号,那么这些错误怎么会出现?非常简单!想象一下代码:
if (a > b)
result = a;
第一眼看上去更优雅
if (a > b) {
result = a;
}
甚至
if (a > b)
{
result = a;
}
但是现在让我们假设您想向代码中添加一些调试信息:
if (a > b)
System.out.println ("a > b, we're inside if-block");
result = a; //This line is ALWAYS executed
正如您所见,犯错误非常容易。因此,只要不要省略大括号,事情就会简单得多。将代码粘贴到代码块中会非常好!发布问题时您应该更加小心,因为这是不可读的。单击“编辑”,选择您的代码,然后单击“101010”按钮,然后每次缩进正确回答。你的问题是什么?不清楚。投票结束——这里没有问题。@Closer:这里有一个问题,但不可否认,现在解决这个问题需要太多的努力。让提问者完成他的编辑,它应该会变得更清楚。将你的代码粘贴到代码块中会很好!你真的应该多加小心n发布问题,因为这是不可读的。单击“编辑”,选择您的代码,然后单击“101010”按钮,并正确缩进所有内容。您的问题是什么?不清楚。投票关闭--这里没有问题。@Closer:这里有一个问题,但必须承认,现在要解决它需要太多的努力。让asker完成他的任务编辑后,它应该会变得更清晰。@davit和你在这个位置插入了括号?或者其他任何地方?@davit和你在这个位置插入了括号?或者其他任何地方?@Andreas谢谢。更正:)@Andreas谢谢。更正:)