一趟快速排序的算法是:

1)设置两个变量i、j排序开始的时候:i=0,j=N-1;

2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];

3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]互换;

4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;

5)重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。找到符合条件的值,进行交换的时候i, j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。

1)基本思想:选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。

(2)实现代码如下:

public class quicksort{ 
		/*
		 * 快速排序
		 */
		int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};   
		public quicksort(){  
		    quick(a);  
		    for(int i=0;i<a.length;i++){  
		       System.out.print(a[i]+" "); 
		    }
		}    
	    public int getMiddle(int[] list, int low, int high) {
	    	int tmp = list[low];    //数组的第一个作为中轴     
		    while (low < high) {     
		    	while (low < high && list[high] >= tmp) {     
		    		high--;     
		    	}     
		    	list[low] = list[high];   //比中轴小的记录移到低端     
		    	while (low < high && list[low] <= tmp) {     
		    		low++;     
		    	}     list[high] = list[low];   //比中轴大的记录移到高端     
		     }     
		    list[low] = tmp;              //中轴记录到尾     
		    return low;                   //返回中轴的位置  
		}    
		public void _quickSort(int[] list, int low, int high) {     
			if (low < high) {     
				int middle = getMiddle(list, low, high);  //将list数组进行一分为二     
				_quickSort(list, low, middle - 1);        //对低字表进行递归排序     	  
				_quickSort(list, middle + 1, high);       //对高字表进行递归排序     
			}
		}   
		public void quick(int[] a2) {
			if (a2.length>0) {    //查看数组是否为空     
				_quickSort(a2,0,a2.length-1);
			}
		}
		public static void main(String[] args) {
			quicksort qs=new quicksort();
			qs._quickSort(qs.a,0,qs.a.length-1);
		}
}