快速排序 图文介绍+Java代码实现
快速排序采用的是分治法的思想,首先把一个数值序列划分为两个子序列,然后对两个子序列在进行分治,最终得到有序的序列。
快速排序的流程:
1) 从数值队列中选择一个基准值;
2)将队列中的其他元素与基准值元素比较,小元素放左边,大元素放右边(递增序列),至此以基准值为中心划分为两部分,左边序列比基准值小,右边序列比基准值大;
3)递归基准值左右两边的序列
一次递归的流程图如下所示:
实现代码如下(请注意代码中的注释部分,涉及到比较次数的简单优化问题):
public class QuickSorting { static int sum = 0; public static void quickSorting(int[] array, int start, int end) { if(start < end){ //记录原始的开始结束位置 int i = start; int j = end; //保留基准值 int pivot = array[start]; while (start < end) { //必须使用>=,否则将会倒是if多调用很多次 sum=27次 //使用 >,sum = 48次 while (start < end && array[end] >= pivot) end--; if (start < end) { sum++; array[start] = array[end]; start++; } while (start < end && array[start] <= pivot) start++; if (start < end) { sum++; array[end] = array[start]; end--; } } //while循环结束后 start = end array[start] = pivot; quickSorting(array, i, start - 1); quickSorting(array, end + 1, j); } } public static void main(String[] args) { int[] array = {4, 7, 2, 8, 3, 8,5,7,4,8,3,8,3,2,6,3,3,8,0,56,4,2,4,6,9}; quickSorting(array, 0, array.length - 1); for (int i : array) { System.out.print(i + " "); } System.out.println(); System.out.println(sum); } }