日期:2014-05-20  浏览次数:20813 次

竟然发现外国人编的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向前移动一个位置,所以还少一次~
------解决方案--------------------
印刷错误。。。
------解决方案--------------------
放进去运行一下就知道了。自己动手
------解决方案--------------------
自己放手做一下就知道对错了
------解决方案--------------------
一楼说那么清楚了,你应该本着谦虚的态度表示感谢,而不是说什么第几版,晕.
------解决方案--------------------
因为你老师只是看了,没有去运行
再说了,我认为你老师让你背的是思想而不是具体代码
------解决方案--------------------