x参考值,左右两边开始扫,左找出>=x的第一个值,右边找出第一个<= x的值,进行交换。交换后,右边区间值都满足大于X,左边的值都满足小于X。
class Quicksort {
static void qsort(int items[]) {
qs(items, 0, items.length-1);
}
private static void qs(int items[], int left, int right)
{
int i, j;
int x, y;
i= left; j=right;
x=items[(left+right)/2];
//do-while解决一次完整分区,左边的x小,右边的比x大。
do{
while((items[i] < x)&& (i< right))
i++;
while((x<items[j])&& (j>left))
j--;
if(i <= j) {//i=j 自己跟自己换,改变了i,j值 跳出循环
y= items[i];
items[i]= items[j];
items[j]=y;
i++;
j--;
}
}while( i<= j);
//完成一次完整分区do-while后,在进行递推
if( left < j)
qs(items, left, j);
if( i < right)
qs(items, i, right);
}
}
class QSDemo {
public static void main(String args[]) {
int a[]={1,2,4,5,6,3,3,8};
System.out.print("Original array: ");
for (int i: a)
System.out.print(i+" ");
System.out.println();
//now, sort the array
Quicksort.qsort(a);
System.out.print("Sorted array: ");
for(int i: a)
System.out.print(i+" ");
System.out.println();
}
}