package simple;

public class SimpleSort {
  private int[] a;//待排序的数组
  public int elems; //数据的长度,不是数组的长度
  private int maxSize;
    
  /*
    * 初始化
    */

  public SimpleSort(int max){
    maxSize = max;
    a = new int[maxSize];
    elems =0;    
  }
    
  public void add(int i){
    if(elems==maxSize){
      return;
    }
    a[elems] = i;
    elems ++;
  }
    
  public void display(){
    for(int i=0;i<elems;i++){
      System.out.print(a[i]+" ");
    }
    
    System.out.println();
  }
/*
* 在外层循环中,最好要写成for(int out =elems-1;out>1;out--)
* 因为如果当外层循环到(out=1),执行内层循环就变成了这种情况:for( int in=0;in<1;in++);即比较a[0]、a[1]的大小;这在内循环in<2已经执行了
*/

  public void bubbleSort(){
    for(int out = elems-1;out>0;out--){
      for(int in = 0;in<out;in++ ){
        if(a[in]>a[in+1]){
          swap(in,in+1);
        }
      }
    }
  }
// 注意传值调用陷阱
  public void swap(int i, int j){
    int temp = a[i];
    a[i] = a[j];
    a[j] = temp;
  }
    
  //选择排序    
  public void selectSort(){
    int index;    
    for(int out = 0;out < elems-1;out++){
        index = out;//每一次进行外循环时,
        for(int in =out+1;in<elems;in++){
        if(a[in]<a[index]){
          index =in;
        }
        }        
        swap(out,index);
    }
  }
    
  public void insertSort(){
    for(int out =1;out<elems;out++){
      int temp = a[out];
      int in = out;
      // while循环作用,是用来为插入新元素,将元素后移让出位置
      while(in>0 && a[in-1] >= temp){
        a[in] =a[in-1];
        in--;
      }
      a[in] = temp;
    }
  }
    
  /**
    * @param args
    */

  public static void main(String[] args) {
    
    SimpleSort array = new SimpleSort(10);
    array.add(12);
    array.add(10);
    array.add(3);
    array.add(4);
    array.add(11);
    array.add(8);
    array.add(54);
    array.add(7);
    array.add(4);
    array.display();
    //array.bubbleSort();
    array.insertSort();
    //array.selectSort();
    System.out.println("排序后的效果");
    array.display();
  }

}
 
代码很幼稚,希望高手不要见笑,再次贴出来,只为自己以后复习比较方便而已。