竟然发现外国人编的java冒泡算法是错的,请高手指教
在java数据结构和算法(第二版),RObert Lafore著
第一个冒泡算法,
class ArrayBub
{
private long[] a;
private int nElems;
public ArrayBub(int max)
{
a = new long[max];
nElems=0;
}
public void insert(long value)
{
a[nElems] = value;
nElems++;
}
public void display()
{
for(int j=0;j <nElems;j++)
System.out.print(a[j]+ " ");
System.out.println( " ");
}
public void bubbleSort()
{
int out,in;
for(out=nElems-1;out> 1;out--)
for(in = 0;in <out;in++)
if(a[in]> a[in+1])
swap(in,in+1);
}
private void swap(int one,int two)
{
long temp = a[one];
a[one]=a[two];
a[two]= temp;
}
}
class BubbleSortApp
{
public static void main(String[] args)
{
int maxSize =100;
ArrayBub arr;
arr = new ArrayBub(maxSize);
arr.insert(67);
arr.insert(89);
arr.insert(90);
arr.insert(77);
arr.insert(99);
arr.insert(66);
arr.insert(44);
arr.display();
arr.bubbleSort();
arr.display();
}
}
上面的运行出来后,得到66 44 67 77 89 90 99,明显是错误的,我怀疑他少算了一步,上面的程序针对最小数不在末尾的数组,完全正确, 只要最小数在末尾就是错的,我想了半天,也不知道为什么,难道著名程序大师编的第二版也有错吗,请高手指教,上面冒泡排序关键代码如下
public void bubbleSort()
{
int out,in;
for(out=nElems-1;out> 1;out--)
for(in = 0;in <out;in++)
if(a[in]> a[in+1])
swap(in,in+1);
------解决方案--------------------nElems=7,out=6,外层for循环从6到2只循环了5次,每次44向前移动一个位置,所以还少一次~
------解决方案--------------------印刷错误。。。
------解决方案--------------------放进去运行一下就知道了。自己动手
------解决方案--------------------自己放手做一下就知道对错了
------解决方案--------------------一楼说那么清楚了,你应该本着谦虚的态度表示感谢,而不是说什么第几版,晕.
------解决方案--------------------因为你老师只是看了,没有去运行
再说了,我认为你老师让你背的是思想而不是具体代码
------解决方案--------------------