思想:从需要排序的数组中随机选择一个元素,将数组分为比该元素大的,和比该元素小的两部分,然后分别进行排序,直到完成排序。
代码:
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); //递归调用,将后半部分继续按以上规则排序
}
浙公网安备 33010602011771号