简介
快速排序和其他几种排序的方法相比它的效率较高,因此经常被使用。它由C.R.A.Hoare于1962年提出的一种划分交换排序。采用了一种分治策略,通常称其为分治法(Divide-and-ConquerMethod)。其时间复杂度为O(N*logN)
分治法的基本思想
将原问题分解为若干个规模更小但结构与原问题类似的子问题。递归这些子问题,然后将这些子问题的解组合为原问题的解。
快速排序的步骤
1、首先在数组中找出一个元素的数值,该值作为基准数。一般选择数组下标中间的数或第一个元素。
2、分区时将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3、再对分好的左右区间进行第2步骤,直到各区间只有一个数。
快速排序实现
public void QuickSort1(int[] array, int l, int r) { if (l < r) { int i = l, j = r; int element = array[i]; while (i < j) { while (i < j && array[j] >= element)//找到小于element的数 j--; if (i < j) { array[i] = array[j]; i++;//后一个元素 } while (i < j && array[i] < element)//找到大于element的数 i++; if (i < j) { array[j] = array[i]; j--;//前一个元素 } } array[i] = element; QuickSort1(array, l, i - 1);//左区间 QuickSort1(array, i + 1, r);//右区间 } }