快速排序本质上是把一个数组分为两个数组,然后递归调用自身来为每一个子数组进行快速排序来实现的,又称划分排序,是一个递归的过程。
public class QuickSort{ /** * @param data 要排序的数组 * @param left 左边数组下标 * @param right 右边数组下标 */ static void quickSort(int[] data, int left, int right){ if(left<right){ // 一趟排序算法, 返回枢钮位置 int pivot = partition(data, left, right); // 左边排序 quickSort(data, left, pivot-1); // 右边排序 quickSort(data, pivot+1, right); } } /** * 一趟快速排序算法 * 将记录数组data分成两部分,left为起始下标,right为结束下标 * @param data * @param left * @param rightt * @return 枢钮位置 */ static int partition(int[] data, int left, int right){ int key = data[left]; int temp; while(left < right){ // 从右边开始,第一个小于Key的元素与Key交换位置 while(left<right && data[right]>=key) right--; //交换元素位置 temp = data[right]; data[right] = data[left]; data[left] = temp; // 从左边开始,第一个大于Key的元素与Key交换位置 while(left<right && data[left]<=key) left++; //交换元素位置 temp = data[right]; data[right] = data[left]; data[left] = temp; } return left; } /** * @param args */ public static void main(String[] args) { int data[] = {44,22,2,32,54,22,88,77,99,11,3,98,101,23,834,11,23,53,18}; quickSort(data, 0, data.length-1); for(int i=0;i<data.length;i++){ System.out.print(" "+data[i]); } } }
附快速排序算法图一张,希望能对理解快速排序有帮助: