思想:从需要排序的数组中随机选择一个元素,将数组分为比该元素大的,和比该元素小的两部分,然后分别进行排序,直到完成排序。

代码:

public void sort(int[] arr,int start,int end){
  int i = start;
  int j = end;
  int k;            //取指定分割元素,一般为第一个。因为后面调用时,i可能会变成超过数组长度的值,所以必须满足start<end才能赋值!
  if(i<j){
    k = arr[i];
    while(i<j){        //循环,直到左边都不比所选元素大,右边都不比所选元素小,直到i=j
      while(i<j && arr[j]>=k)  //从右边开始,找出比所选元素小的值的下标
        j--;
      arr[i] = arr[j];      //将该元素放到前面
      while(i<j && arr[i]<=k)  //从左边开始,找出比所选元素大的值的下标
        i++;
      arr[j] = arr[i];      //将该元素放到后面

    }
  }
  arr[i] = k;          //将所选元素放到分隔位置
  sort(arr,start,i-1);       //递归调用,将前半部分继续按以上规则排序
  sort(arr,i+1,end);       //递归调用,将后半部分继续按以上规则排序
}

posted on 2017-09-18 15:27  两耳不闻窗外事  阅读(103)  评论(0)    收藏  举报