快速排序(Quicksort)是对冒泡排序的一种改进。

快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列


设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。


32






32

1234515252024
24






24123




24123



45
2412320


45
24123201525
45
241232015253245

第一次,拿第一个数32,

从右向左比,直到找到比32小的数, 拿第一个数32与最后一个数24比,比32小,把24放到第一个位置,

然后从左向右比,直到找到比32大的数,

拿第二个数12与32比,比32小,继续拿第三个数3与32比,比32小,继续拿第四个数45与32比,比32大,将45放到最后一个位置,

第二次,继续按此方法,从两边往中间找,直到找到左边碰到右边,中间没有数了,将32放入该位置,

这时,32左边得数全是比他小的,右边的数全是比他大的,


然后用此方法,将32左边全部数的,拿第一个24,12当作第一个数,最后一个数25当作最后一个数,继续比,直到找完,


代码:
package com.wangyq.Test;
//快速排序
public class Quick {
	public int[] quick(int[] array,int left, int right){
		int i = left;
		int j = right;
		if(left <right){
			int tmp = array[i];
			do{
				while(array[j] > tmp && i < j){
					j--;
				}
				if(i < j){
					array[i] = array[j];
					i++;
				}
				while(array[i] < tmp && i < j){
					i++;
				}
				if(i < j){
					array[j] = array[i];
					j--;
				}
			}while(i != j);
			array[i] = tmp;
			quick(array, left, i-1);
			quick(array, i+1, right);
		}
		
		return array;
	}
	
	public static void main(String[] args) {
		int[] array = { 32, 12, 3, 45, 15, 25, 20, 24 };
		array = new Quick().quick(array,0,array.length-1);
		
		for (int i = 0; i < array.length; i++)
			System.out.print(array[i] + "  ");
	}
}