我试图对以下列表进行排序(将其插入到数组中): 10 9 8 7 6 5 4 3 2 1 在下面的java代码执行后,我得到以下内容(不确定为什么最大的数字仍未排序,提前感谢您提供的任何帮助): 10 1 2 3 4 5 6 7 8 9
我基本上是从教科书中的以下伪代码实现java代码:
procedure insertionsort(a1, a2, ...an: real numbers with n>=2)
for j:=2 to n
begin
i:=1
while a[j]>a[i]
i=:i+1
temp:=a[j]
for k:=0 to j - i - 1
a[j-k] := a[j-k-1]
a[i]:=temp
end
java代码:
int k, j,i;
long temp;
for(j=2; j<nElems; j++)
{
i=1;
//also tried while(a[j]>=a[i])
while(a[j]>a[i])
i = i +1;
temp = a[j];
for(k=0; k<=(j-i-1);k++)
a[j-k] = a[j-k-1];
a[i] = temp;
}// end for
答案 0 :(得分:2)
在伪代码中,数组索引似乎从“1”开始,而在Java中,数组索引从“0”开始。
将代码更改为:
public class InsertionSort{
public static void main(String[] args) {
int k,j,i,n=5;
long a[]={1025,3689,125,12,254},temp;
for(j=1; j<n; j++) // instead of j=2
{
i=0; // instead of i=1
while(a[j]>a[i])
i = i+1;
temp = a[j];
for(k=0; k<=(j-i-1);k++)
a[j-k] = a[j-k-1];
a[i] = temp;
} // end for
for(long x:a){
System.out.print(x+" ");
}
}
}
输出: 12 125 254 1025 3689
答案 1 :(得分:0)
问题是伪代码数组是基于1的,而Java数组是基于0的。
只需更改
for (j=2; j<nElems; j++) {
i=1;
// more code
到
for (j=1; j<nElems; j++) {
i=0;
// more code