package com.mianshi;
/**
* describe: 快速排序算法1(排序结果从小到大)
* create on: 2011-05-25
* @author sylor.liu
* @version 1.0
* @since jdk1.6
*/
public class QuickSort1 {
private void swap(int a[], int x, int y){
int temp = a[x];
a[x] = a[y];
a[y] = temp;
}
// 以a[r]为基准值,将该段数据拆分为两段,左边的比a[r]小,右边的比a[r]大
// 且返回a[r]在该段数据中的下标(即拆分点)
private int patition(int a[],int p, int r){
// 将该段数组的最后一个值作为基准值point
int point = a[r];
int index = p;
// 除a[r]外, 将比point小的值置换到左边,比point大的置换到右边
for (int i = index; i < r; i++) {
if(a[i] <= point){
swap(a,i,index++);
}
}
// 从左到右,将后一个比point大的值(即a[index])与a[r]互换值
swap(a,index,r);
return index;
}
// 对数组进行快速排序
public void qsort(int[] a, int p , int r){
if (p < r) {
// 以a[r]为基准值,将该段数据拆分为两段,且返回拆分点
int i = patition(a,p,r);
// 对左半段排序
qsort(a,p,i-1);
// 对左半段排序
qsort(a,i+1,r);
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[] = new int[]{12,2,9,5,67,32,6,7};
QuickSort1 qs = new QuickSort1();
qs.qsort(a,0,a.length - 1);
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ;");
}
}
}