快速排序的基本思路就是,把数组分段,对段排序,在整合,有点像归并排序,但是快速排序是原地排序,通常来说,平均运行时间较好。
快速排序的最重要的函数是PARTITION,基本思想就是将某一段排序,有一个中间元素,在该段的最后一个位置上,排序后的结果(一般情况)前半部分小于中间元素,后半部分大于中间元素,当然可能没有前半部分或者后半部分。最后将末尾位置的中间元素移动到合适的位置上。
public class Main {
/**
* @param args
*/
int[] arrays = new int[]{3,4,5,1,2,8};
public void QUICKSORT(int[] A,int p,int r)
{
if(p<r)
{
int q = PARTITION(A, p, r);
QUICKSORT(A, p, q-1);
QUICKSORT(A, q+1, r);
}
}
public int PARTITION(int[] A,int p, int r)
{
int x = A[r];
int i = p - 1;
for(int j=p;j<r;j++)
{
if(A[j]<=x)
{
i++;
int tmp = A[i];
A[i] = A[j];
A[j] = tmp;
}
}
int tmp = A[i+1];
A[i+1] = A[r];
A[r] = tmp;
return i+1;
}
public static void main(String[] args) {
Main main = new Main();
main.QUICKSORT(main.arrays, 0, main.arrays.length-1);
for (int i: main.arrays) {
System.out.println(i+" ");
}
}
}