public class Main
{
public static void main (String[] args)
{
System.out.println("this is java test");
int[] array = {19,97,9,17,1,8};
int L = 0;
int R = array.length - 1;
quickSort(array, L, R);
for (int i = 0; i < array.length; ++i) {
System.out.println(array[i] + " ");
}
}
private static void quickSort(int[] array, int L, int R) {
if (L >= R) {
return;
}
//每次选取一段数组中的最左边元素作为枢轴pivot = array[L]
//先从最右边元素开始,初始时【left】位置为pivot,pivot已存储,所以【left】位置可被覆盖,不会丢失数据
//right = R 指针向前移动,直到遇到比pivot小的元素,right停
//【right】 放 【left】(放之前【left】位置空;放完之后,【right】位置空)
//left = L 指针向后移动,直到遇到比pivot大的袁旭,需要交换,left停
//【left】 放 【right】(放之前【right】位置空;放完之后,【left】位置空)
//什么时候停止?当 left == right 停止,枢轴放在最后的left == right 的位置上
int left = L;
int right = R;
int pivot = array[left];
System.out.println(" L : " + L);
System.out.println(" R : " + R);
System.out.println(" pivot : " + pivot);
while (left < right) {
while (array[right] >= pivot && left < right) {
right --;
}
if (left < right && array[right] < pivot) {
System.out.println("right");
array[left] = array[right];
left += 1;
}
while (array[left] <= pivot && left < right) {
left ++;
}
if (left < right && array[left] > pivot) {
System.out.println("left");
array[right] = array[left];
right -= 1;
}
array[left] = pivot;
System.out.println("------------");
}
quickSort(array, L, left - 1);
quickSort(array, right + 1, R);
}
}
运行结果:
this is java test
L : 0
R : 5
pivot : 19
right
left
------------
right
------------
L : 0
R : 3
pivot : 8
right
------------
L : 2
R : 3
pivot : 9
------------
1
8
9
17
19
97