A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

lsle

初级黑马

  • 黑马币:8

  • 帖子:6

  • 精华:0

© lsle 初级黑马   /  2012-8-11 18:07  /  1374 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


class ArrayBub
   {
   private long[] a;                 // ref to array a
   private int nElems;               // number of data items
//--------------------------------------------------------------
   public ArrayBub(int max)          // constructor
      {
      a = new long[max];                 // create the array
      nElems = 0;                        // no items yet
      }
//--------------------------------------------------------------
   public void insert(long value)    // put element into array
      {
      a[nElems] = value;             // insert it
      nElems++;                      // increment size
      }
//--------------------------------------------------------------
   public void display()             // displays array contents
      {
      for(int j=0; j<nElems; j++)       // for each element,
         System.out.print(a[j] + " ");  // display it
      System.out.println("");
      }
//--------------------------------------------------------------
   public void bubbleSort()
      {
      int out, in;

      for(out=nElems-1; out>1; out--)   // outer loop (backward)
         for(in=0; in<out; in++)        // inner loop (forward)
            if( a[in] > a[in+1] )       // out of order?
               swap(in, in+1);          // swap them
      }  // end bubbleSort()
//--------------------------------------------------------------
   private void swap(int one, int two)
      {
      long temp = a[one];
      a[one] = a[two];
      a[two] = temp;
      }
//--------------------------------------------------------------
   }  // end class ArrayBub
////////////////////////////////////////////////////////////////
class BubbleSortApp
   {
   public static void main(String[] args)
      {
      int maxSize = 100;            // array size
      ArrayBub arr;                 // reference to array
      arr = new ArrayBub(maxSize);  // create the array

      arr.insert(8);               // insert 10 items
      arr.insert(4);
      arr.insert(5);
      arr.insert(7);
      arr.insert(1);
     // arr.insert(88);
     // arr.insert(11);
     // arr.insert(00);
      //arr.insert(66);
      //arr.insert(33);

      arr.display();                // display items

      arr.bubbleSort();             // bubble sort them

      arr.display();                // display them again
      }  // end main()
   }  // end class BubbleSortApp
////////////////////////////////////////////////////////////////
为什么排列后的顺序是41578?

评分

参与人数 1技术分 +1 收起 理由
张立江 + 1 新人鼓励

查看全部评分

2 个回复

倒序浏览
public void bubbleSort()
       {
       int out, in;

      for(out=nElems-1; out>1; out--)   // outer loop (backward),如果out>1的时候,最后一趟a[0]和a[1]没有交换
          for(in=0; in<out; in++)        // inner loop (forward)
             if( a[in] > a[in+1] )       // out of order?
                swap(in, in+1);          // swap them
       }  // end bubbleSort()
这段代码应改为:
public void bubbleSort()
       {
       int out, in;

      for(out=nElems-1; out>=1; out--)   // outer loop (backward)
          for(in=0; in<out; in++)        // inner loop (forward)
             if( a[in] > a[in+1] )       // out of order?
                swap(in, in+1);          // swap them
       }  // end bubbleSort()

评分

参与人数 1技术分 +1 收起 理由
张立江 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 刘圣伟 于 2012-8-11 18:50 编辑

class ArrayBub
   {
   private long[] a;                 // ref to array a
   private int nElems;               // number of data items

   public ArrayBub(int max)          // constructor
      {
      a = new long[max];                 // create the array
      nElems = 0;                        // no items yet
      }

   public void insert(long value)    // put element into array
      {
      a[nElems] = value;             // insert it
      nElems++;                      // increment size
      }

   public void display()             // displays array contents
      {
      for(int j=0; j<nElems; j++)       // for each element,
         System.out.print(a[j] + " ");  // display it
      System.out.println("");
      }

   public void bubbleSort()
      {
      int out, in;
///这个地方,注意,out>0    
      for(out=nElems-1; out>0; out--)   // outer loop (backward)
         for(in=0; in<out; in++)        // inner loop (forward)
            if( a[in] > a[in+1] )       // out of order?
               swap(in, in+1);          // swap them
      }  // end bubbleSort()
//--------------------------------------------------------------
   private void swap(int one, int two)
      {
      long temp = a[one];
      a[one] = a[two];
      a[two] = temp;
      }
//--------------------------------------------------------------
   }  // end class ArrayBub
////////////////////////////////////////////////////////////////
class BubbleSortApp
   {
   public static void main(String[] args)
      {
      int maxSize = 100;            // array size
      ArrayBub arr;                 // reference to array
      arr = new ArrayBub(maxSize);  // create the array

      arr.insert(8);               // insert 10 items
      arr.insert(4);
      arr.insert(5);
      arr.insert(7);
      arr.insert(1);
     // arr.insert(88);
     // arr.insert(11);
     // arr.insert(00);
      //arr.insert(66);
      //arr.insert(33);

      arr.display();                // display items

      arr.bubbleSort();             // bubble sort them

      arr.display();                // display them again
      }  // end main()
   }  // end class BubbleSortApp

评分

参与人数 1技术分 +1 收起 理由
张立江 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马