代码很简单。就不解释了。就说说自己写代码时遇到的问题吧。
无辜的总有一个0值,插入到 左边;
 
12 10 3 198 120 8 54 7
----------------
12 10 3 0 0 8 54 7
 
只因为,数组长度是10,但是只有8个数据,所以就有2个数组元素为0
 
 
package high;

public class PartinSort {

  private int a[];
  public int elems; //数据的长度,不是数组的长度
  private int maxSize;
    
  public PartinSort(int maxSize){
    this.maxSize = maxSize;
    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();
  }

// 注意传值调用陷阱
  public void swap(int i, int j){
    int temp = a[i];
    a[i] = a[j];
    a[j] = temp;
  }
    
    
  public int partinIt(int left,int right,int num){
    int leftPrev = left -1;
    int rightBack = right +1;
    
  while(true){
    while(a[++leftPrev]<num){
        
    }
    
    while(a[--rightBack]>num){
        
    }
    
    if(leftPrev >= rightBack){
      break;
    }else{
      swap(leftPrev,rightBack);
    }
    
    }
    
  return leftPrev;
  }

  public static void main(String args[]){
    PartinSort array = new PartinSort(10);
    array.add(12);
    array.add(10);
    array.add(3);
    array.add(198);
    array.add(120);
    array.add(8);
    array.add(54);
    array.add(7);
    array.add(1);
    array.add(111);
    array.add(4);
    array.display();
    System.out.println(array.partinIt(0, 9, 100));
    array.display();
  }
    
}