/**
* 快速排序
* @author zhoujianghai
* zhoujiangbohai@163.com
*/
public class QuickSort {
/**
* @param args
*/
public static void main(String[] args) {
int data[] = {12,34,56,7,78,345,5,6,890};
System.out.print("排序前:");
for(int i : data) {
System.out.print(" "+i);
}
quickSort(data,0,data.length - 1);
System.out.println();
System.out.print("排序后:");
for(int i : data) {
System.out.print(" "+i);
}
}
public static void quickSort(int[] data, int low, int high) {
int i = low;
int j = high;
if(low < high) {
//key:作为比较的元素
int key = data[low];
// 从数组两端交替地向中间扫描;i从左边开始,j从右边开始
while (i < j) {
while (i < j && data[j] > key) {//从右边查找
j--;
}
if (i < j) {
//找到比key小的,移动到左边
data[i] = data[j];
i++;
}
while (i < j && data[i] < key) {//从左边查找
i++;
}
if (i < j) {
// 找到比key大的,移动到右边
data[j] = data[i];
j--;
}
}
//key移动到正确位置
data[i] = key;
// 前半部分递归排序
quickSort(data,low, i - 1);
// 后半部分递归排序
quickSort(data,i + 1,high);
}
}
}