快速排序的基本概念为:
找出一个元素作为基准,然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正确位置,排序完成。总结为一句话:快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。
选择基准元:1、固定基准元、2、随机基准元 、3、三数取中
实例代码如下:
package sort;/** * 快速排序 * 快速排序采用了分治策略。就是在一个数组中取一个基准数字,把小的数放基准的左边,大的数放基准的右边。 * 基准左边和右边分别是新的序列。在新的序列中再取一个基准数字,小的放左边,大的放右边。 * 这个里面用到的递归。我们需要三个参数,一个是数组,另外两个是序列的边界 * @author JY */public class QuickSort{ void sort(int num[],int left,int right){ if (left=num.length){ return 0; } int prio=num[left+(right-left)/2]; //获取数组中间元素的下标 while (left<=right){ //从两端交替向中间扫描 while (num[left] prio) right--; if (left<=right){ swap(num,left,right); //最终将基准数归位 left++; right--; } } return left; } public void swap(int[] num,int left,int right){ int temp = num[left]; num[left] = num[right]; num[right] = temp; } public static void main(String args[]){ int[] num={7,3,5,1,2,8,9,2,6}; new QuickSort().sort(num,0,num.length-1); for(int n:num) { System.out.print(n+" "); } }}