思想: 定义一个sign,大于sign的放置在左侧,小于sign放置在右侧
(如:A, B, C, D, sign,E, F, G中,ABCD小于sign,EFG大于sign) ,然后在左右两侧的子数组,使用同样的方法(递归)
public class Sort4 {
public static void main(String[] args) {
int[] array = {3,1,5,7,2,4,9,6,3};
int length = array.length;
quickSort(array, 0, length-1);
}
private static void quickSort(int[] array, int start, int end) {
int sign = array[start];
int i = start+1;
int j = end;
if(i>=j){
return;
}
while(i<j){
// 先从左侧找到第一个大于sign的元素 array[i]
while(i<j && array[i]<sign){
i++;
}
// 先从右侧找到第一个小于sign的元素 array[j]
while(i<j && array[j]>sign){
j--;
}
// 交换array[i] 和 array[j]
int tmp = array[i];
array[i] = array[j];
array[j] = tmp;
i++;
}
// 在此处,是一次循环的结束边界点,注意i,j分别落在什么位置,将sign放置的合适的位置上
array[start] = array[j-1];
array[j-1] = sign;
quickSort(array,start,i-1);
quickSort(array,j,end);
}
}
原文:https://www.cnblogs.com/lixiaopengcc/p/10865311.html